当我.fetchAll({ withRelated: 'backfire' });
时,我的输出结果中出现了一个名为backfire的属性,其值为{}。在knex调试模式下,我清楚地看到select "backfire".* from "backfire" where "backfire"."id" in (?);
在复制/粘贴到sqlite3控制台时有效(当然在输入有效的ID之后)。所以我知道我的模型必须有点正确。
exports.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();
});
});
};
module.exports = function(bookshelf) {
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);
}
});
return {
Backfire: Backfire,
BackfireTrigger: BackfireTrigger
};
}
function getAllTriggers() {
var self = this;
return new self.models.BackfireTrigger()
.fetchAll({
withRelated: ['backfire']
});
}
答案 0 :(得分:1)
查看文档时,似乎“withRelated”字段不是model.fetchAll的选项,也不是model.fetch的选项。我自己也遇到过这个问题。如果使用debug:true运行knex,您可以看到它只会查询您正在获取的表,而不是查询关系。
答案 1 :(得分:1)
我自己是Bookshelf.js的新手,但我想,这可以通过Collections
(http://bookshelfjs.org/#Collection)来实现。
var BackfireTriggers = bookshelf.Collection.extend({
model: BackfireTrigger
});
BackfireTriggers.forge().fetch({ withRelated: 'backfire' }).then(…);