在bookshelf js对象中使用orWhere

时间:2016-01-05 11:21:01

标签: javascript node.js bookshelf.js knex.js

我使用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
        });
    });

3 个答案:

答案 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();