0

私はBookshelfJSを使用しています。と の 2 つのモデルがusersありpostsます。明らかに、ここでの関係は多対多です。だから私はピボットテーブルを持っていますpost_user

が与えられたので、そのユーザーuser_idの をすべて見つけたいと思います。postsこれまでのところ、次を使用してこれを行うことができましたknex

knex.select()
    .from('post_user')
    .where('user_id', user_id)
    .then(function (pivots) {
        // Now loop through pivots and return all the posts
        // Using pivot.post_id
        pivots.map(function(pivot) {})
    });

これを行うよりクリーンな方法はありますか?

4

1 に答える 1

1

Bookshelf モデルで多対多の関係を定義する必要があります。このようなもの:

var User = bookshelf.Model.extend({
  tableName: 'users',
  posts: function() {
    return this.belongsToMany(Post);
  }
});

var Post = bookshelf.Model.extend({
  tableName: 'posts',
  users: function() {
    return this.belongsToMany(User);
  }
});

慣例により、Bookshelf が使用するピボット テーブルは です(アルファベット順で最初のテーブルから始まるposts_usersテーブル名を と組み合わせたもの)。aと a (およびこれら 2 つの複合 PK)_が含まれている必要があります。ピボット テーブルの名前を変更したくない場合は、ピボット テーブルのテーブルと ID を定義する方法についてのドキュメントを参照してください。user_idpost_idbelongsToMany

この後、Bookshelf を使用してモデルにクエリを実行できます。

return new User().where('id', user_id)
    .fetch({withRelated: 'posts'})
    .then(function (user) {
       var postCollection = user.get('posts');
       // do something with the posts
    });

fetchのドキュメントも参照してください。

于 2015-03-19T19:39:45.723 に答える