如何使用 Sequelize belongsToMany 关联?
How to use Sequelize belongsToMany associations?
我有项目和用户。
一个用户可以拥有多个项目。
一个项目可以有多个用户。
我尝试使用 belongsToMany 关联对此进行建模。
在我的服务器上,我这样定义关联:
user.belongsToMany(project, {
through: 'writer_of_project'
foreign-key: 'user'
as: 'projects'
});
project.belongsToMany(user, {
through: 'writer_of_project'
foreign-key: 'project'
as: 'writers'
});
在我的客户端上它看起来像这样:
user: {
id: 1,
...
projects: [1,2,3]
}
project: {
id: 1,
...
writers: [1,4,5]
}
在服务器上,关联需要第三个 table 来存储关联,而 Sequelize 似乎不允许我从中包含相应的模型。
如果我 运行 一个 project.find(1)
和 include:[user]
我得到
user is not associated with project!
如果我尝试将上面示例中的项目放入更新方法,用户属性将被忽略(我预计 project.setUsers(projectUpdate.users 会在后台发生)。
处理这些关联的加载和更新的正确方法是什么?
当您向关联提供别名 (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 ]
});
我有项目和用户。
一个用户可以拥有多个项目。
一个项目可以有多个用户。
我尝试使用 belongsToMany 关联对此进行建模。
在我的服务器上,我这样定义关联:
user.belongsToMany(project, {
through: 'writer_of_project'
foreign-key: 'user'
as: 'projects'
});
project.belongsToMany(user, {
through: 'writer_of_project'
foreign-key: 'project'
as: 'writers'
});
在我的客户端上它看起来像这样:
user: {
id: 1,
...
projects: [1,2,3]
}
project: {
id: 1,
...
writers: [1,4,5]
}
在服务器上,关联需要第三个 table 来存储关联,而 Sequelize 似乎不允许我从中包含相应的模型。
如果我 运行 一个 project.find(1)
和 include:[user]
我得到
user is not associated with project!
如果我尝试将上面示例中的项目放入更新方法,用户属性将被忽略(我预计 project.setUsers(projectUpdate.users 会在后台发生)。
处理这些关联的加载和更新的正确方法是什么?
当您向关联提供别名 (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 ]
});