我有sequelizejs的问题无论我如何在表之间设置关联,我都无法出于某种原因开始工作。我的问题是,我有一张表,名为结果,这个表的结构为:
| id (primary) | first_guy_id | second_guy_id | third_guy_id | notes |
|--------------|--------------|---------------|--------------|-------|
| | | | | |
此表连接到用户,这里有趣的部分,表用户具有简单的结构,如此
| 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很容易,即使每列的所有id(first_guy,second ...)都不同但在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(此处为伪代码)相同“在Results.first_guy_id上INNER JOIN User.id作为MY_FIELD_NAME ”
如何将所有这些字段加入同一个模型,但每列的结果不同?因此,结果的获得结果将返回嵌套的3个不同用户,其ID在该特定行的结果表中列出。使用相同的型号?
我浏览了sequelize的文档,尝试了很多组合但从未实现过结果。这几乎感觉就像我必须最终编写模型一样,这些模型被命名为“First_gu”,“second_guy”,“third_guy”,用于Sequalize工作,并自动附加“_id”,就像它与一样用户模型现在。但对于应该通过belongsTo / hasOne中的“foreignKey”属性解决的事情来说,感觉太过分了吗?
答案 0 :(得分:2)
这是一个简单的解决方案。您应该为每个结果的列定义关系。
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;
});