knex之类的查询动态添加

jac*_*ack 2 node.js express knex.js

`let add_query = ".andWhere('company_name', 'like','%marker%')";
knex('franchisee').where('franchisee_name', 'like', '%jackmarker%')${add_query}
.then((resp) => {
    console.log("resp >>",resp)
})`
Run Code Online (Sandbox Code Playgroud)

听到我想在节点js中使用knex npm执行类似查询的操作。我使用变量add_query使用此变量想要动态地进行knex查询。

像这个查询

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

Abh*_*ain 5

您可以添加部分查询,如下所示:

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();
};
Run Code Online (Sandbox Code Playgroud)

您还可以使用以下原始查询:

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;
    });
};
Run Code Online (Sandbox Code Playgroud)