关联原因前键不匹配错误

时间:2019-04-28 01:15:42

标签: sqlite sequelize.js associations

我目前正在sequelize.js上进行实验,更具体地说是在关联中进行实验。我想要实现的是以下内容。我必须建模:

  1. 用户
  2. 位置

我的逻辑如下:

  1. 用户可以分配或不能分配职位
  2. 如果用户有职位,则该职位的ID存储在users表的字段“ assignedPositionId”中。
  3. 如果用户没有职位,则将“ assignedPositionId”值设置为null。
  4. 一个职位可以分配给多个用户

我面临的问题是,我可以成功创建用户,但无法创建职位!我总是不断收到错误消息:

SQLITE_ERROR: foreign key mismatch - "positions" referencing "users"
User.hasOne(Position, {
  sourceKey: "assignedPositionId",
  foreignKey: "id",
  as: "position"
});

Position.hasMany(User, {
  sourceKey: "id",
  foreignKey: "assignedPositionId",
  as: "users",

});

我知道这并不容易-也许已经晚了,但我真的不知道出了什么问题!非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

在这些情况下,我在使用hasOne时遇到问题,例如,倾向于使用belongsTo。

User.belongsTo(Position, {
   foreignKey: "assignedPositionId",
   as: "position"
});

也就是说,创建头寸时生成的SQL是什么样的?您可以直接在Sqlite shell中执行此操作吗?这类错误消息有时表明您的表PK有问题。

答案 1 :(得分:0)

@ KenOn10,谢谢您的建议。在仔细阅读文档并进行了几次测试之后,我最终采用了以下方法,该方法非常有效:

User.hasMany(Position, {
  as: "position",
  sourceKey: "assignedPositionId",
  foreignKey: "id",
  constraints: false
});

Position.belongsTo(User, {
  as: "users",
  foreignKey: "assignedPositionId",
  constraints: false
});

再次感谢您的时间。