我有以下结构:
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
我做错了吗?
答案 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'});
我现在可以创建多个评论。 我有点麻烦选择所有这些,但这是我相信的另一个问题。