bookshelf.js多对多关系不起作用(belongsToMany)

时间:2014-07-26 20:48:03

标签: node.js bookshelf.js

我无法使用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!也许我应该只使用查询构建器。

1 个答案:

答案 0 :(得分:2)

我认为我有类似的问题,并且有posted。两种方式定义关系,即从事件标记,另一种从标记事件,可能会创建一个僵局。当正在执行事件定义时,它会找到对标记的依赖关系并跳转以执行标记的定义,其中存在依赖关系回到活动。此时它们都没有完全创建。