web-dev-qa-db-ja.com

Sequelize belongsToManyアソシエーションを使用するには?

プロジェクトとユーザーがいます。

ユーザーは多くのプロジェクトを持つことができます。

プロジェクトは複数のユーザーを持つことができます。

これをbelongsToManyアソシエーションでモデル化してみました。

私のサーバーでは、そのような関連付けを定義しました:

_user.belongsToMany(project, {
  through: 'writer_of_project'
  foreign-key: 'user'
  as: \projects
});

project.bbelongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});
_

私のクライアントでは、次のようになります。

_user: {
  id:       1,
  ...
  projects: [1,2,3]
}

project: {
  id:     1,
  ...
  writers: [1,4,5]
}
_

サーバーでは、関連付けには関連付けを格納するための3番目のテーブルが必要であり、Sequelizeでは、それに対応するモデルを含めることができないようです。

_include:[user]_でproject.find(1)を実行すると、

ユーザーはプロジェクトに関連付けられていません!

上記の例のプロジェクトをupdateメソッドに入れようとすると、 users属性は単に無視されます(私はproject.setUsers(projectUpdate.usersがバックグラウンドで発生することを期待していました)。

これらの関連付けの読み込みと更新を処理する正しい方法は何ですか?

12
K..

アソシエーションにエイリアス(as)を提供する場合は、それもインクルードに提供する必要があります。

project.belongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});

project.find({
  where: { id: 1 },
  include: [ { model: User, as: 'writers' } ]
});

または、関連付けを保存することもできます。

Project.writersAssociation = project.belongsToMany(user, {
  through: 'writer_of_project'
  foreign-key: 'project'
  as: 'writers'
});

project.find({
  where: { id: 1 },
  include: [ project.writersAssociation ]
});
19