多对多插入表

时间:2019-08-24 19:44:42

标签: javascript node.js reactjs sequelize.js sequelize-cli

我依次建立了两个具有多对多关系的模型。 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);
        }
    });

1 个答案:

答案 0 :(得分:0)

对于多对多关系,您必须使用belongsToMany而不是hasMany

根据您的情况:

db.user.belongsToMany(db.post, {through: "likes"});
db.post.belongsToMany(db.user, {through: "likes"});

,您可以使用3种方法来管理这种关系addremoveset

addremove添加或删除传递参数中的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

处获得更多信息。