Sequelize具有相同外键的多对多表覆盖了该值

时间:2016-11-20 21:53:27

标签: mysql node.js sequelize.js

我有以下结构:

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 续集版:~3.24.2

我做错了吗?

2 个答案:

答案 0 :(得分:2)

belongsToMany表示多对多关系,它确保一个帖子将通过PostComment中的一行仅与一个用户联接。它并没有违反多对多关系原则,因为post也可以通过PostComment中的另一行与其他用户建立关系。因此,在您的情况下,当用户能够为一个帖子添加多个评论时,您应该定义以下关联:

Post.hasMany(PostComment);

User.hasMany(PostComment);

并添加评论将如下所示:

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

答案 1 :(得分: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'});

我现在可以创建多个评论。 我有点麻烦选择所有这些,但这是我相信的另一个问题。