使用sequelize版本实现:"^4.15.0"
我正在尝试添加来自2级的关联的两个级别的条件。
Model1.find({
include: [
{
model: Model2,
as: 'model2_alias',
attributes: [
'model2_id'
],
include: [{
model: Model3,
as: 'model3_alias',
attributes: [
'model3_id'
]
}]
}
],
where: {
model3_alias.id: { [Op.in]: [1, 2, 3] }
}
});
我疲倦了方法:
where: {
'$model2_alias.model3_alias.id$': { [Op.in]: [1, 2, 3] }
}
但给出了model2_alias.model3_alias.id
未定义/找不到的错误。
上面的编写为 '$model2_alias.id$': { [Op.in]: [1, 2, 3] }
时确实有效
当在任何MySQL管理工具中执行形成的SQL语句时,都会给出适当的结果,因此我试图实现的where
条件也不是错误的。
任何想法我在这里缺少什么或仅在一个级别上起作用。那么,要在更多级别上做什么?
您可以在任何级别上添加任何级别 -
Model.find({
where : {
// where 1
},
include : [{
model : Model1,
where : {
// Where 2
},
include : [{
model : Model2,
where : {
// Where 3
}
}]
}]
});
希望有帮助!
,您也可以尝试
sequelize.where()
,例如
sequelize.where(
sequelize.literal('"model2_alias.model3_alias.id"'), { [Op.in]: [1, 2, 3] }
)
关于sub query
,这意味着您使用limit
/offset
(1:m
关系或具有left join
(。如果您有1:1
关系,只需将required: true
添加到include
,即可获得inner join
而不是left join
,而sequelize
不创建sub query
。
我假设您的代码不起作用,因为您使用了model1_id
而不是id
。因此代码应为
Model1.find({
include: [
{
model: Model2,
as: 'model2_alias',
attributes: [
'id'
],
include: [{
model: Model3,
as: 'model3_alias',
attributes: [
'id'
]
}]
}
],
where: {
'$model2_alias.model3_alias.id$': { [Op.in]: [1, 2, 3] }
}
});
也提到@rahul,您可以在您的内部直接使用
Model1.find({
include: [
{
model: Model2,
as: 'model2_alias',
attributes: [
'id'
],
include: [{
model: Model3,
where: {
'id': { [Op.in]: [1, 2, 3] }
}
as: 'model3_alias',
attributes: [
'id'
]
}]
}
],
});