node.js- sequelize.js嵌套关联在状态的外部检查 - 未定义



使用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'
               ]
           }]
       }
    ],
});

最新更新