内联涉及时,有条件地选择js进行排序

时间:2019-01-18 12:40:55

标签: sequelize.js

我正在开发一个旅游应用程序的项目中。一些项目以以下方式添加到系统中 广告(酒店,夜总会)和一些物品(例如海滩,国家公园)添加为有用的信息

我有一个名为items的表。

项目

id | category_id | name                | is_payment 
1  | 1           | hotel califonia     | 1          
2  | 1           | hotel hilton        | 1          
3  | 2           | Yala national park  | 0          
4  | 2           | Kumana national park| 0          

此处category_id是指类别表。

类别

id | name           | type
1  | Hotels         | commercial
2  | National parks | non-commercial

我想从项目表中选择所有项目。 但是,如果这是商业商品,则需要在显示给最终用户之前检查是否付款。

我到目前为止所做的是

const data = await db[model_name].findAndCountAll({
            include: [{
                model: db.Category,
                where: {

                }
            }],
            where: {
                city_id: req.params.id
            }
        })

我的原始查询也将是这样

SELECT i.*
FROM items i
JOIN categories c 
ON i.category_id = c.id
WHERE c.type != 'commercial' 
OR (c.type = 'commercial' AND i.is_payment = 1)

如何使用sequelizejs实现此目标? 任何帮助 在此先感谢!

1 个答案:

答案 0 :(得分:0)

也许这会有所帮助:

include: [{
    model: db.Category,
    where: {
        [Op.or]: [
            {type: {[Op.ne]: 'commercial'}},
            {
                [Op.and]: [
                    {type: 'commercial'},
                    {is_payment: 1}
                ]
            }
        ]
    }
}],

我没有测试。 随着时间的流逝,http://docs.sequelizejs.com/manual/tutorial/querying.html上的一些有关运算符的部分将非常有用。