0

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

データベーステーブル「タグ」:

  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 を嫌っています! たぶん、クエリビルダーを使用する必要があります。

4

1 に答える 1

2

私は同様の問題を抱えていると思い、それについて投稿しました。イベントからタグへのリレーションシップとタグからイベントへのリレーションシップなど、両方の方法で関係を定義すると、デッドロックが発生する可能性があります。Event定義が実行されると、Tagへの依存関係が検出され、Tagの定義を実行するためにジャンプします。その内部にはEventへの依存関係があります。この時点では、両方とも完全には作成されていません。

于 2014-07-28T08:41:48.147 に答える