繁体   English   中英

Sequelize Include with Where 条件

[英]Sequelize Include with Where Condition

我在如何使用 where 条件查询多个包含时遇到问题。

尝试使用对 sql 的直接查询,它工作正常。 我使用 sql 制作了一个示例,但在使用 sequelize 查询将其转换为 node.js 时遇到了问题。

这是正确的 SQL

SELECT pr.id, pr.component_id, pr.requirement_type_id, c.name, rt.name
FROM product_requirements as pr
LEFT JOIN components as c
ON pr.component_id = c.id
LEFT JOIN requirement_types as rt
ON pr.requirement_type_id = rt.id
WHERE c.name LIKE '%Product%'
OR rt.name LIKE '%Product%';

我尝试将其转换为续集,这是我迄今为止所做的,但它不断出现错误或正确的结果

let query = {
    where : {
        [Op.or] : [
            {component.name : { [Op.like] : `%${keyword}%` }},
            {requirement.name : { [Op.like] : `%${keyword}%` }}
        ]
    },
    include : [
        {
            model : models.components,
            as : 'component'
        },
        {
            model : models.requirement_types,
            as : 'requirement'
        }
    ]
}

我预计它会像 sql 结果一样

我认为where 的查询不理解别名

var where = {
    [Op.or]: [
        sequelize.literal(`[components].name like "%${keyword}%"`),
        sequelize.literal(`[requirement_types].name like "%${keyword}%"`)
    ]
};
var include = [
    {
        model: models.components,
        as: 'component'
    },
    {
        model: models.requirement_types,
        as: 'requirement'
    }
];
product_requirements.findAll({
    where: where,
    include: include

}).then(results => {
});

发现我们需要添加required: false以使其工作并像这样编码。

let where = {
    product_id : productId,
    [Op.or] : [
        {"$component.name$" : {[Op.like] : `%${keyword}%`}},
        {"$requirement_type.name$" : {[Op.like] : `%${keyword}%`}}
    ]
}
let include = [
    { model: models.components, required: false },
    { model: models.requirement_types, required: false }
]
query = {
    where : where,
    include : include
}

models.product_requirements.findAll(query)
        .then((result) => {
            res.status(200).send({
                data : result
            })
        })
        .catch((err) => {
            res.error(err)
        })

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM