Last active
February 23, 2016 11:31
-
-
Save flaviodesousa/1465625173202fda563e to your computer and use it in GitHub Desktop.
Bookshelf js fetchAll withRelated option returns empty relation object - attempt to reproduce
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"name": "bookshelf-relations", | |
"version": "1.0.0", | |
"description": "", | |
"main": "index.js", | |
"scripts": { | |
"test": "echo \"Error: no test specified\" && exit 1" | |
}, | |
"author": "", | |
"license": "ISC", | |
"dependencies": { | |
"bookshelf": "^0.9.1", | |
"knex": "^0.9.0", | |
"sqlite3": "^3.1.1" | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
➜ bookshelf-relations rm data.sqlite3 | |
rm: remove regular file ‘data.sqlite3’? y | |
➜ bookshelf-relations node | |
> var knex = require('knex')({client:'sqlite3',connection:{filename: 'data.sqlite3'}}); | |
undefined | |
> var bookshelf = require('bookshelf')(knex); | |
undefined | |
> var up = function(knex, Promise) { | |
... return knex.schema.createTable("backfire", function(table) { | |
..... table.increments("id").primary(); | |
..... table.string("response").notNullable(); | |
..... table.string("created_by").notNullable(); | |
..... table.timestamps(); | |
..... }).then(function(){ | |
..... return knex.schema.createTable("backfireTrigger", function(table) { | |
....... table.increments("id").primary(); | |
....... table.string("trigger").notNullable(); | |
....... table.integer("backfire_id").unsigned().notNullable().references("id").inTable("backfire"); | |
....... table.string("created_by").notNullable(); | |
....... table.timestamps(); | |
....... }); | |
..... }); | |
... }; | |
undefined | |
> up(knex); | |
Promise { | |
_bitField: 0, | |
_fulfillmentHandler0: undefined, | |
_rejectionHandler0: undefined, | |
_progressHandler0: undefined, | |
_promise0: undefined, | |
_receiver0: undefined, | |
_settledValue: undefined } | |
> var Backfire = bookshelf.Model.extend({ | |
... tableName: 'backfire', | |
... backfireTriggers: function() { | |
..... return this.hasMany(BackfireTrigger); | |
..... } | |
... }); | |
undefined | |
> | |
> var BackfireTrigger = bookshelf.Model.extend({ | |
... tableName: 'backfireTrigger', | |
... backfire: function() { | |
..... return this.belongsTo(Backfire); | |
..... } | |
... }); | |
undefined | |
> var bf1, bf2; | |
undefined | |
> new Backfire({response: 'twist', created_by: 'twister'}). | |
... save(). | |
... then(function(bf) { | |
... bf1 = bf.id; | |
... return new Backfire({response: 'shout', created_by: 'shouter'}). | |
... save(); | |
... }). | |
... then(function(bf) { | |
... bf2 = bf.id; | |
... return new BackfireTrigger({trigger: 'death', backfire_id: bf1, created_by: 'dead'}). | |
... save(); | |
... }). | |
... then(function() { | |
... return new BackfireTrigger({trigger: 'birth', backfire_id: bf2, created_by: 'mother'}). | |
... save(); | |
... }). | |
... then(function() { | |
... return new BackfireTrigger({trigger: 'fall', backfire_id: bf2, created_by: 'faller'}). | |
... save(); | |
... }). | |
... then(function() { | |
... return new BackfireTrigger({trigger: 'attack', backfire_id: bf2, created_by: 'attacker'}). | |
... save(); | |
... }). | |
... then(function() { | |
... return BackfireTrigger. | |
... fetchAll({withRelated: ['backfire']}). | |
... then(function(result) { | |
..... console.log(result.toJSON()); | |
..... }); | |
... }); | |
Promise { | |
_bitField: 131072, | |
_fulfillmentHandler0: undefined, | |
_rejectionHandler0: undefined, | |
_progressHandler0: undefined, | |
_promise0: undefined, | |
_receiver0: undefined, | |
_settledValue: undefined, | |
_boundTo: | |
ModelBase { | |
attributes: { response: 'twist', created_by: 'twister' }, | |
_previousAttributes: {}, | |
changed: { response: 'twist', created_by: 'twister' }, | |
relations: {}, | |
cid: 'c1' } } | |
> [ { id: 1, | |
trigger: 'death', | |
backfire_id: 1, | |
created_by: 'dead', | |
created_at: null, | |
updated_at: null, | |
backfire: | |
{ id: 1, | |
response: 'twist', | |
created_by: 'twister', | |
created_at: null, | |
updated_at: null } }, | |
{ id: 2, | |
trigger: 'birth', | |
backfire_id: 2, | |
created_by: 'mother', | |
created_at: null, | |
updated_at: null, | |
backfire: | |
{ id: 2, | |
response: 'shout', | |
created_by: 'shouter', | |
created_at: null, | |
updated_at: null } }, | |
{ id: 3, | |
trigger: 'fall', | |
backfire_id: 2, | |
created_by: 'faller', | |
created_at: null, | |
updated_at: null, | |
backfire: | |
{ id: 2, | |
response: 'shout', | |
created_by: 'shouter', | |
created_at: null, | |
updated_at: null } }, | |
{ id: 4, | |
trigger: 'attack', | |
backfire_id: 2, | |
created_by: 'attacker', | |
created_at: null, | |
updated_at: null, | |
backfire: | |
{ id: 2, | |
response: 'shout', | |
created_by: 'shouter', | |
created_at: null, | |
updated_at: null } } ] | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var knex = require('knex')({client:'sqlite3',connection:{filename: 'data.sqlite3'}}); | |
var bookshelf = require('bookshelf')(knex); | |
var up = function(knex, Promise) { | |
return knex.schema.createTable("backfire", function(table) { | |
table.increments("id").primary(); | |
table.string("response").notNullable(); | |
table.string("created_by").notNullable(); | |
table.timestamps(); | |
}).then(function(){ | |
return knex.schema.createTable("backfireTrigger", function(table) { | |
table.increments("id").primary(); | |
table.string("trigger").notNullable(); | |
table.integer("backfire_id").unsigned().notNullable().references("id").inTable("backfire"); | |
table.string("created_by").notNullable(); | |
table.timestamps(); | |
}); | |
}); | |
}; | |
up(knex); | |
var Backfire = bookshelf.Model.extend({ | |
tableName: 'backfire', | |
backfireTriggers: function() { | |
return this.hasMany(BackfireTrigger); | |
} | |
}); | |
var BackfireTrigger = bookshelf.Model.extend({ | |
tableName: 'backfireTrigger', | |
backfire: function() { | |
return this.belongsTo(Backfire); | |
} | |
}); | |
var bf1, bf2; | |
new Backfire({response: 'twist', created_by: 'twister'}). | |
save(). | |
then(function(bf) { | |
bf1 = bf.id; | |
return new Backfire({response: 'shout', created_by: 'shouter'}). | |
save(); | |
}). | |
then(function(bf) { | |
bf2 = bf.id; | |
return new BackfireTrigger({trigger: 'death', backfire_id: bf1, created_by: 'dead'}). | |
save(); | |
}). | |
then(function() { | |
return new BackfireTrigger({trigger: 'birth', backfire_id: bf2, created_by: 'mother'}). | |
save(); | |
}). | |
then(function() { | |
return new BackfireTrigger({trigger: 'fall', backfire_id: bf2, created_by: 'faller'}). | |
save(); | |
}). | |
then(function() { | |
return new BackfireTrigger({trigger: 'attack', backfire_id: bf2, created_by: 'attacker'}). | |
save(); | |
}). | |
then(function() { | |
return BackfireTrigger. | |
fetchAll({withRelated: ['backfire']}). | |
then(function(result) { | |
console.log(result.toJSON()); | |
}); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment