【问题标题】:knex like query dynamically addknex like 查询动态添加
【发布时间】:2017-12-27 06:02:54
【问题描述】:
`let add_query = ".andWhere('company_name', 'like','%marker%')";
knex('franchisee').where('franchisee_name', 'like', '%jackmarker%')${add_query}
.then((resp) => {
    console.log("resp >>",resp)
})`

听说我想在节点 js 中使用 knex npm 执行类似查询。 我使用这个变量来获取变量 add_query 想要动态地进行 knex 查询。

喜欢这个查询-

`knex('franchisee').where('franchisee_name', 'like','%jackmarker%').andWhere('company_name', 'like','%marker%')
.then((resp) => {
    console.log("resp >>",resp)
})`

【问题讨论】:

    标签: node.js express knex.js


    【解决方案1】:

    您可以像这样添加部分查询:

    const getResults = (options) => {
        let query = knex('table');
        if (options.where) {
            query = query.where('franchisee_name', 'like', '%jackmarker%');
        }
    
        if (options.other) {
            query = query.where('company', 'like', '%marker%');
        }
    
        return query.select();
    };
    

    您也可以像这样使用原始查询:

    const getVehiclePolicies = (options) => {
        return P.try(() => {
            const queries = [
                `
                    SELECT
                        vp.id AS vehicle_policy_id,
                        vp.policy_id,
                        vp.policy_number,
                        vp.status,
                        vp.service_count,
                        vp.manufacturer,
                        vp.model,
                        vp.variant,
                        vp.colour,
                        vp.year,
                        vp.policy_owner,
                        vp.policy_owner_email,
                        vp.policy_owner_phone,
                        vp.policy_owner_country_code,
                        vp.vin_number,
                        vp.engine_number,
                        vp.vehicle_type,
                        vp.start_date,
                        vp.end_date,
                        vp.expired,
                        vp.created_at,
                        vp.updated_at
                    FROM vehicles AS v
                        INNER JOIN vehicle_policies AS vp ON v.registration_number = vp.vehicle_id
                        INNER JOIN company_policies AS cp ON cp.id = vp.policy_id
                    WHERE
                        NOT v.deleted
                        AND NOT vp.deleted
                        AND NOT cp.deleted              
                `
            ];
    
            const bindings = [];
    
            if (options.vehicle_id) {
                queries.push('AND vp.vehicle_id = ?');
                bindings.push(options.vehicle_id);
            }
    
            if (options.policy_number) {
                queries.push('AND vp.policy_number = ?');
                bindings.push(options.policy_number);
            }
    
            if (options.vehicle_policy_id) {
                queries.push('AND vp.id = ?');
                bindings.push(options.vehicle_policy_id);
            }
    
            if (options.default_policy) {
                queries.push('AND cp.default_policy');
            }
    
            queries.push(`LIMIT ? OFFSET ?`);
            bindings.push(options.limit || 15);
            bindings.push(options.offset || 0);
    
            return db.raw(queries.join(' '), bindings);
        }).then((data) => {
            debug('GET VEHICLE POLICIES DATA');
            debug(data.rows);
    
            return data.rows;
        });
    };
    

    【讨论】:

    • 你可以使用 LOWER(column)
    【解决方案2】:

    您可以使用速记查询构建器,例如

    Const fname = () =>knex(tableName)
    .where(builder=>
    builder.whereIn('id', [1, 11, 15]).whereNotIn('id', [17, 19]))
    .andWhere(()=> {
    If(condition)this.where('id', '>', 10)
    }))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-13
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 2013-10-06
      相关资源
      最近更新 更多