gpt4 book ai didi

sql - Sequelize (js) 多列与一张表的关联

转载 作者:太空宇宙 更新时间:2023-11-03 22:45:53 25 4
gpt4 key购买 nike

希望你做得很好。

我有一个 Sequelizejs 问题,由于某种原因我无法开始工作,无论我如何设置表之间的关联。我的问题是,我有一个名为 结果 的表,该表的结构为:

| 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",
}

即使每列的所有 id(first_guy、second ...)都不同,在常规 SQL 中执行 SQL JOIN 也很容易,但在 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。

我找到此解决方案时遇到的两个问题是:

  1. 如何使用sequelize将结果连接到任何字段上,就像使用常规SQL一样(这里是伪代码)“INNER JOIN User.id on Results.first_guy_id as MY_FIELD_NAME

  2. 如何将所有这些字段连接到同一模型,但每列的结果不同?因此,从结果获取的结果将根据该特定行的结果表中列出的 ID 返回嵌套的 3 个不同用户。使用相同型号?

我浏览了sequelize的文档,尝试了很多组合,但从未达到结果。几乎感觉我最终必须编写模型,这些模型的命名类似于这些字段“First_gu”、“second_guy”、“third_guy”,以便 Sequalize 工作并自动在其中附加“_id”,就像使用 一样现在用户模型。但是对于应该通过belongsTo/hasOne中的“foreignKey”属性来解决的事情来说,感觉太费力了?

最佳答案

这是一个简单的解决方案。您应该为每个结果的列定义关系。

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;
});

关于sql - Sequelize (js) 多列与一张表的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44211762/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com