关联子句外键不匹配错误

Association cause foreing key mismatch error

我目前正在 sequelize.js 上进行试验,更具体地说是在协会中进行试验。我想要实现的是以下内容。我要模特:

  1. 用户
  2. 位置

我的逻辑如下:

  1. 用户可以分配也可以不分配职位
  2. 如果用户有职位,则职位的 ID 存储在用户 table 的字段 "assignedPositionId" 中。
  3. 如果用户没有职位,则 "assignedPositionId" 值设置为空。
  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",

});

我知道这不是一件容易的事——也许已经晚了,但我真的不知道哪里出了问题!非常感谢您的帮助!

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

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

也就是说,创建职位时生成的 SQL 是什么样子的?你能直接在 Sqlite shell 中执行吗?此类错误消息有时表明您的 table PK 存在问题。

@KenOn10,感谢您提供的建议。在仔细阅读文档并进行多次测试后,我最终采用了以下方法,效果非常好:

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

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

再次感谢您的宝贵时间。