一个类似的问题被问到here,但没有一个有意义的答案。
假设我有两个表,用户和项目。 我们希望在这两个实体之间建立n:m关系。
我们创建
Project.belongsToMany(User, {
through: UserProjectAssociation,
});
现在, 如果我做
myProject.addUser(1) // where projectId is 1 and userId is 1
这是有效的。
但是如果我再次尝试完全相同的操作,它就会失败(因为projectId和userId当然是唯一的。
我想做的是
model.UserProjectAssociation.findOrCreate({
where: {
UserId: userId,
ProjectId: projectId,
}
}
但我找不到关于findOrCreate api的任何参考,关于如何在关联表上调用它。
最好的方法是什么?该命令的预期结果将是记录(刚刚插入或已经存在)。
类似的问题是删除记录。 (如果记录(userId:1,projectId:1)存在则删除它,如果不存在,则不执行任何操作。
答案
正如@piotrbienias在评论中所指出的,语法完全相同。确保数据库支持所需的隔离级别。 (在这种情况下,SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ)。