我无法使用bookshelf.js开展多对多关系。
型号:
var Event = bookshelf.Model.extend({
tableName: 'events',
idAttribute: 'event_id',
tags: function() {
return this.belongsToMany(Tag, 'events_tags', 'event_id', 'tag_id');
}
});
var Tag = bookshelf.Model.extend({
tableName: 'tags',
idAttribute: 'tag_id',
events: function() {
return this.belongsToMany(Event, 'events_tags', 'tag_id', 'event_id');
}
});
数据库表“事件”:
event_id name
-------------------------------------------------
1 party at my place
数据库表“tags”:
tag_id name
---------------------------
1 music
数据库表“events_tags”:
event_tag_id event_id tag_id
-------------------------------------------------------------
1 1 1
查询没有返回应该的内容:
new db.Event()
.fetchAll({withRelated: ['tags']})
.then(function(events) {
console.log(events.toJSON());
});
日志输出:
[{'event_id': 1, 'name': 'party at my place', 'tags': []}]
那就是:空标签数组,这是错误的。
问题:我的代码是否存在问题?所需的输出应为:
[{
'event_id': 1, 'name': 'party at my place',
'tags': [{'tagId':1, 'name':'music'}]
}]
这对问题没有帮助,但无论如何我都会抛弃它:我现在讨厌Node JS中的所有ORM!也许我应该只使用查询构建器。
答案 0 :(得分:2)
我认为我有类似的问题,并且有posted。两种方式定义关系,即从事件到标记,另一种从标记到事件,可能会创建一个僵局。当正在执行事件定义时,它会找到对标记的依赖关系并跳转以执行标记的定义,其中存在依赖关系回到活动。此时它们都没有完全创建。