【发布时间】: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”属性来解决的事情感觉太费劲了?
【问题讨论】:
标签: sql node.js sequelize.js