2016-11-20 64 views
3

我有以下结构:Sequelize许多一对多表具有相同的外键是压倒价值

var User = sequelize.define('user', { 
    name: DataTypes.STRING 
}); 

var Post = sequelize.define('post', { 
    text: DataTypes.STRING 
}); 

var PostComment = sequelize.define('postComment', { 
    id: { 
    type: DataTypes.BIGINT, 
    primaryKey: true, 
    autoIncrement: true 
    }, 
    comment: DataTypes.TEXT 
}); 

Post.belongsToMany(User, { as: 'postUserComment', through: PostComment }); 
User.belongsToMany(Post, { through: PostComment }); 

同一个用户,应该能够使倍数意见相同的柱。 但是,当我执行

post.addPostUserComment(currentUserId, {comment: "teste"}) 

如果我已经有了这个职位由currentUser做了一个评论,它覆盖的时候,它应该创建一个新的行中的数据库“注释”的价值。

方言:mysql的 Sequelize版本:3.24.2〜

我做错什么了吗?

回答

2

belongsToMany意味着多对多关系,它确保一个帖子将通过PostComment中的一行与一个用户连接。它不违背多对多的关系原则,因为在PostComment中post也可以通过另一行与其他用户有关系。所以你的情况时,用户可以将多个注释添加到一个职位,你应该定义下列协会:

Post.hasMany(PostComment);

User.hasMany(PostComment);

,并添加注释会看起来像这样:

post.addPostComment({userId: currentUserId, comment: 'test'}) 
+0

我不得不放弃并按照自己的方式去做,我能够创建新的实例,但是我无法全部选择它们。你的解决方案为我工作。谢谢 –

0

我最终在做

Post.belongsToMany(User, {as: 'postUserComment', through: {model: models.PostComment, unique: false}, foreignKey: 'idPost'}); 

User.belongsToMany(Post, {through: {model: models.PostComment, unique: false}, foreignKey: 'idUserComment'}); 

我现在可以创建多个评论。 我在挑选它们时遇到了一些麻烦,但这是我相信另一个问题的原因。

+0

我不得不通过@ tilov-yrys的方式来做,因为我能够创建新的实例但不选择它们 –