【问题标题】:Sequelize: how to set PK of join table as pair of foreign keys to be able to use save() on the join table instance without triggering 'no PK error'?Sequelize:如何将连接表的 PK 设置为外键对,以便能够在连接表实例上使用 save() 而不会触发“无 PK 错误”?
【发布时间】:2020-05-07 22:17:56
【问题描述】:

如何让 Sequelize 将连接表的外键视为复合主键?我认为这是默认完成的,但是当我尝试保存我的UserMenuItem 实例(这是UserMenuItem 之间的连接表)时,得到了这个错误:Error: You attempted to save an instance with no primary key, this is not allowed since it would result in a global update

我的关联定义如下:

 models.User.hasMany(models.UserMenuItem, { foreignKey: 'userID', onDelete: 'CASCADE' });
 models.UserMenuItem.belongsTo(models.User, { foreignKey: 'userID', onDelete: 'CASCADE' });

 models.MenuItem.hasMany(models.UserMenuItem, { foreignKey: 'menuItemID', onDelete: 'CASCADE' });
 models.UserMenuItem.belongsTo(models.MenuItem, { foreignKey: 'menuItemID', onDelete: 'CASCADE' });

 models.MenuItem.belongsToMany(models.User, { through: models.UserMenuItem, foreignKey: 'menuItemID', onDelete: 'CASCADE' }); // I tried adding "otherKey: 'userID'" as well
 models.User.belongsToMany(models.MenuItem, { through: models.UserMenuItem, foreignKey: 'userID', onDelete: 'CASCADE' }); I tried adding "otherKey: 'menuItemID'" as well

我不包括模型定义,因为我认为它们不相关。 UserMenuItem 有一个名为 ID 的 PK,并且连接表有一些额外的数据字段,但 FK 除外。

是否有可能,还是我必须在连接表中添加不必要的 PK?

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    您不能定义复合主键。

    Belongs-To-Many 在直通模型上不存在主键时创建唯一键。可以使用 uniqueKey 选项覆盖此唯一键名。

    BelngToMany in official docs

    【讨论】:

    • 好的,谢谢。 Sequelize 的另一个失望。那我单独加个PK吧……
    【解决方案2】:

    即使我遇到了同样的情况,每当我们保存模型实例时,我都通过传递 id 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-08-30
      • 1970-01-01
      • 2013-10-21
      • 1970-01-01
      • 1970-01-01
      • 2022-08-02
      • 2020-06-06
      相关资源
      最近更新 更多