【问题标题】:Sequelize Many-to-many table with identical foreign key is overriding the valueSequelize 具有相同外键的多对多表正在覆盖该值
【发布时间】:2017-04-04 05:41:09
【问题描述】:

我有以下结构:

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 });

同一个用户,应该能够在同一个帖子中创建多个 cmet。 但是当我执行时

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

如果我已经对当前用户发表的这篇文章发表了评论,那么当它应该创建一个新行时,它会覆盖它在数据库中的“评论”值。

方言:mysql 续集版本:~3.24.2

我做错了吗?

【问题讨论】:

    标签: mysql node.js sequelize.js


    【解决方案1】:

    我最终做了

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

    我现在可以创建多个 cmets。 我在选择它们时遇到了一些麻烦,但我相信这是另一个问题。

    【讨论】:

    • 我必须通过@tilov-yrys 的方式来做,因为我能够创建新实例但不能选择它们
    【解决方案2】:

    belongsToMany 表示多对多关系,它确保一个帖子通过 PostComment 中的一行只与一个用户连接。它不违反多对多关系原则,因为帖子也可以通过 PostComment 中的另一行与其他用户建立关系。因此,在您的情况下,当用户能够将多个 cmets 添加到一篇文章中时,您应该定义以下关联:

    Post.hasMany(PostComment);

    User.hasMany(PostComment);

    添加 cmets 将如下所示:

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

    【讨论】:

    • 我必须放弃并按照你的方式去做,我能够创建新实例,但我无法全部选择它们。你的解决方案对我有用。谢谢
    猜你喜欢
    • 1970-01-01
    • 2023-03-24
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多