[英]Sequelize filter based on JOIN results
我有一个表orders
,它与categories
有很多关系。 即一个订单可以同时拥有food
、 fruit
、 banana
的类别。
Order.belongsToMany(models.category, { through: 'orderCategory', as: 'categories' });
我想进行查询以获取至少具有给定类别之一的所有订单。 例如,给我所有具有food
类别的订单。 如果我对获得仅包含 JOIN 中的食物类别的订单感到满意,这将很简单。 但我想包括所有类别,即使其中只有一个匹配。 所以基本上我需要根据左外连接结果过滤值。
我现在的查询:
order.findAll({
include: [
{
model: models.category,
as: 'categories',
where: {
id: 'a437ffab-5085-4fd7-b193-23dfb299aa39',
},
// required: false,
},
],
})
我还尝试将 where 语句放在父级上。
{ '$categories.id$': 'a437ffab-5085-4fd7-b193-23dfb299aa39' }
但我想它本质上是一样的。
一个想法是在获取之后进行过滤,但是我将无法进行适当的限制和偏移。
编辑:根据评论的建议,我为此编写了原始 SQL,这可能会使尝试将其转换为 Sequelize 变得更容易。
SELECT
*
FROM
orders
JOIN order_categories ON order_categories.order_id = orders.id
WHERE
orders.id in(
SELECT
order_id FROM order_categories
WHERE
order_categories.category_id = 'a437ffab-5085-4fd7-b193-23dfb299aa39')
我不确定这是否是最有效的方法,但它有效。 现在的问题是如何使用 Sequelize 做到这一点。
let we have an order_id with name of order_id. then we can retrive data using this code
order.findAll({
where:{id:order_id},
include: [
{
model: models.category,
as: 'categories',
where: {
id: 'a437ffab-5085-4fd7-b193-23dfb299aa39',
},
// required: false,
},
],
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.