动态 where 子句 Sequelize

时间:2021-03-22 14:48:17

标签: javascript sequelize.js where-clause

我有以下代码:

const { TN, TITLE, QUEUE, TYPE, SERVICE, OWNER, CUSTOMER_ID, CUSTOMER_USER_ID, CREATE_BY, create_time, ESTADO_DO_SLA } = req.query;

    let query = {};
    if (TN != null) query.TN = TN;
    if (TITLE != null) query.TITLE = TITLE;
    if (QUEUE != null) query.QUEUE = QUEUE;
    if (TYPE != null) query.TYPE = TYPE;
    if (SERVICE != null) query.SERVICE = SERVICE;
    if (OWNER != null) query.OWNER = OWNER;
    if (CUSTOMER_ID != null) query.CUSTOMER_ID = CUSTOMER_ID;
    if (CUSTOMER_USER_ID != null) query.CUSTOMER_USER_ID = CUSTOMER_USER_ID;
    if (CREATE_BY != null) query.CREATE_BY = CREATE_BY;

    const limit = req.query.limit != null ? Number.parseInt(req.query.limit) : 1000;
    const page = req.query.page != null ? (Number.parseInt(req.query.page) * limit) - limit : 0;


    const tickets = await ViewSLA.findAll({
        raw: true,
        offset: page,
        limit: limit,
        where: query
    });

关键是,where 部分正在工作,但仅在值相等时才匹配,但我想在某些参数中做一些 Op.like 和让其他人可选。

例如,匹配 TN(票号)参数的确切值是有意义的,但我想通过 TITLE 参数进行过滤,如果它被告知,使用 like 在 where子句。

这可能吗?

1 个答案:

答案 0 :(得分:0)

我刚刚找到了一个方法:

const { TN, TITLE, QUEUE, TYPE, SERVICE, OWNER, CUSTOMER_ID, CUSTOMER_USER_ID, CREATE_BY, create_time, ESTADO_DO_SLA } = req.query;

        let query = {};
        if (TN != null) query.TN = TN;
        if (TITLE != null) query.TITLE = {
            [Op.like]: `%${TITLE}%`
        };
        if (QUEUE != null) query.QUEUE = QUEUE;
        if (TYPE != null) query.TYPE = TYPE;
        if (SERVICE != null) query.SERVICE = SERVICE;
        if (OWNER != null) query.OWNER = OWNER;
        if (CUSTOMER_ID != null) query.CUSTOMER_ID = CUSTOMER_ID;
        if (CUSTOMER_USER_ID != null) query.CUSTOMER_USER_ID = CUSTOMER_USER_ID;
        if (CREATE_BY != null) query.CREATE_BY = CREATE_BY;
        if (ESTADO_DO_SLA != null) query.ESTADO_DO_SLA = ESTADO_DO_SLA;

        const limit = req.query.limit != null ? Number.parseInt(req.query.limit) : countTickets;
        const page = req.query.page != null ? (Number.parseInt(req.query.page) * limit) - limit : 0;


        const tickets = await ViewSLA.findAll({
            raw: true,
            offset: page,
            limit: limit,
            where: query
        });

像魅力一样工作。

相关问题