我依次建立了两个具有多对多关系的模型。 Sequelize正确创建了联接表,但无法将其插入其中。我一直在研究文档的这一部分:http://docs.sequelizejs.com/en/latest/docs/associations/#creating-with-associations,但根据他们的示例,我什么也做不了。不幸的是,他们没有很多对很多的例子。
db.user.hasMany(db.post, {through: "likes"});
db.post.belongsTo(db.user, {through: "likes"});
Post.findById(postId).then( (post) => {
try{
Post.setLikes({userId: 1, postId: 1});
}catch(e){
console.error(e);
}
});
答案 0 :(得分:0)
对于多对多关系,您必须使用belongsToMany
而不是hasMany
根据您的情况:
db.user.belongsToMany(db.post, {through: "likes"});
db.post.belongsToMany(db.user, {through: "likes"});
,您可以使用3种方法来管理这种关系add
,remove
和set
add
和remove
添加或删除传递参数中的ID,而set
用传递参数中的ID替换关系中的所有ID(设置为删除所有+添加id传递参数)
例如:
const postId = 1
Post.findById(postId).then( async(post) => {
try{
await Post.addLikes([1,2,3]); // 3 relationship are in db postId: 1 with userId: 1,2,3
await Post.removeLikes(1); // 2 relationship are in db postId: 1 with userId: 2,3
await Post.setLikes(1); // unique relationship is in db postId: 1 with userId:1
}catch(e){
console.error(e);
}
});
您可以在https://sequelize.org/master/class/lib/associations/has-many.js~HasMany.html#instance-method-add
处获得更多信息。