sequelize (js) 关联多个列与一个表
Posted
技术标签:
【中文标题】sequelize (js) 关联多个列与一个表【英文标题】:sequelize (js) association for multiple columns with one table 【发布时间】:2017-10-27 22:46:34 【问题描述】:希望你做得很好。
我在使用 sequelizejs 时遇到问题,无论我如何在表之间设置关联,我都无法开始工作。我的问题是,我有一个名为 Results 的表,该表的结构为:
| id (primary) | first_guy_id | second_guy_id | third_guy_id | notes |
|--------------|--------------|---------------|--------------|-------|
| | | | | |
这个表连接到Users,有趣的部分来了,表Users有一个简单的结构,像这样
| id (primary) | first | last |
|--------------|-------|------|
| | | |
我想用 sequelize 做的是,得到一个看起来与此类似的结果(之后在 json 中),嵌套连接:
"id": 17,
"first_guy_id": "id": 12, "first": "First .... ,
"second_guy_id": "id": 14, "first": "First .... ,
"third_guy_id": "id": 19, "first": "First .... ,
"notes": "notes",
在常规 SQL 中执行 SQL JOIN 很容易,即使每列 (first_guy, second ...) 的所有 id 都不同,但在 sequelize 中达到这样的目标让我完全绝望。
当我以这种方式关联两个表时:
Results.hasOne(User, as:'first_guy', foreignKey: 'first_guy' );
User.belongsTo(Results, as: 'first_guy' );
实际调用时使用
findOne ...
include: [
model: User,
include: [
model: User,
as: 'first_ugy',
where:
'id': sequelize.col('Results.first_guy_id')
,
],
,
我收到以下错误:
ER_BAD_FIELD_ERROR: Unknown column 'Results.user_id' in 'field list'
这当然是因为它寻找 user_id 作为外键,连接到表“User”,它认为键应该是 user_id。
我找到这个解决方案的两个问题是:
如何使用 sequelize 加入任何字段的结果,方法与使用常规 SQL 的方法相同(此处为伪代码)“INNER JOIN User.id on Results.first_guy_id as MY_FIELD_NAME”
如何将所有这些字段连接到同一个模型但每列的结果不同?因此,从 Results 获取的结果将返回嵌套的 3 个不同用户,其 ID 列在该特定行的 Results 表中。使用相同的模型?
我浏览了 sequelize 的文档,尝试了很多组合,但始终没有达到结果。几乎感觉我最终不得不编写模型,这些模型的名称类似于“First_gu”、“second_guy”、“third_guy”这些字段,以便 Sequalize 工作并自动附加“_id”,就像使用 现在是用户模型。但是对于应该通过belongsTo/hasOne中的“foreignKey”属性来解决的事情感觉太费劲了?
【问题讨论】:
【参考方案1】:这是一个简单的解决方案。您应该为每个结果的列定义关系。
Results.belongsTo(User, as:'firstGuy', foreignKey: 'first_guy_id');
Results.belongsTo(User, as:'secondGuy', foreignKey: 'second_guy_id');
...
然后你可以这样查询:
Results.findById(resultId,
include: [
model: User,
as: 'firstGuy'
,
model: User,
as: 'secondGuy'
,
...
]
).then(function(result)
var firstGuyUser = result.firstGuy;
);
【讨论】:
你救了我的命?以上是关于sequelize (js) 关联多个列与一个表的主要内容,如果未能解决你的问题,请参考以下文章
在 sequelize.js 中获取与 belongsToMany 的关联