关联子句外键不匹配错误
Association cause foreing key mismatch error
我目前正在 sequelize.js 上进行试验,更具体地说是在协会中进行试验。我想要实现的是以下内容。我要模特:
- 用户
- 位置
我的逻辑如下:
- 用户可以分配也可以不分配职位
- 如果用户有职位,则职位的 ID 存储在用户 table 的字段 "assignedPositionId" 中。
- 如果用户没有职位,则 "assignedPositionId" 值设置为空。
- 一个职位可以分配给多个用户
我遇到的问题是,我可以成功创建用户,但是我无法创建职位!我总是收到错误消息:
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
});
再次感谢您的宝贵时间。
我目前正在 sequelize.js 上进行试验,更具体地说是在协会中进行试验。我想要实现的是以下内容。我要模特:
- 用户
- 位置
我的逻辑如下:
- 用户可以分配也可以不分配职位
- 如果用户有职位,则职位的 ID 存储在用户 table 的字段 "assignedPositionId" 中。
- 如果用户没有职位,则 "assignedPositionId" 值设置为空。
- 一个职位可以分配给多个用户
我遇到的问题是,我可以成功创建用户,但是我无法创建职位!我总是收到错误消息:
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
});
再次感谢您的宝贵时间。