我使用bookshelf js构建了一个查询。当我在查询中使用orWhere
时会出错
对象没有方法'或者'。
以下是我的代码
var filters = {};
// Restaurnat id is must
if (restaurant_id != undefined) {
filters.restaurant_id = restaurant_id
} else {
res.json({
status: 422,
message: "No restaurant id provided",
data: ""
});
}
var query = dp.CusOrder.query('where', filters);
if (customer_name != undefined) {
var first_name = '%' + customer_name + '%';
query.where('first_name', 'LIKE', first_name)
.orWhere('last_name', 'LIKE', first_name);
}
query.fetchAll()
.then(function(result) {
res.json({
data: result
});
});
答案 0 :(得分:2)
您需要使用bookshelf附带的knex查询构建器来执行此操作,因为或者有一个knex函数(bookshelf使用knex进行数据库访问)。
一个简单的例子如下,假设dp.CusOrder是伪造模型
dp.CusOrder.query(function(qb) {
qb.where(filters);
if (customer_name != undefined) {
var first_name = '%' + customer_name + '%';
qb.where('first_name', 'LIKE', first_name)
.orWhere('last_name', 'LIKE', first_name);
}
})
.then(function(result) {
res.json({data: result})
});
您可能需要摆弄andWhere和orWhere以获得正确的查询,或者您可以使用whereRaw,因为您的查询相对较小
答案 1 :(得分:1)
我认为您应该为查询提供一个函数来执行
喜欢:...).query(qb => qb.where(first condition).orWhere(second condition)).fetch(...
答案 2 :(得分:0)
查看bookshelf-eloquent扩展,它直接在书架模型上公开了许多Knex.js功能。它还添加了whereLike()和orWhereLike()。您的代码看起来像这样:
...
let query = dp.CusOrder.where(filters);
if (customer_name != undefined) {
let first_name = '%' + customer_name + '%';
query.whereLike('first_name', first_name)
.orWhereLike('last_name', first_name);
}
let result = await query.fetchAll();