knex like 查询动态添加
knex like query dynamically add
`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)
})`
您可以像这样添加部分查询:
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;
});
};
您可以使用 shorthand 查询生成器,例如
Const fname = () =>knex(tableName)
.where(builder=>
builder.whereIn('id', [1, 11, 15]).whereNotIn('id', [17, 19]))
.andWhere(()=> {
If(condition)this.where('id', '>', 10)
}))
`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)
})`
您可以像这样添加部分查询:
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;
});
};
您可以使用 shorthand 查询生成器,例如
Const fname = () =>knex(tableName)
.where(builder=>
builder.whereIn('id', [1, 11, 15]).whereNotIn('id', [17, 19]))
.andWhere(()=> {
If(condition)this.where('id', '>', 10)
}))