在 Bookshelf.js 对象中使用 orWhere

3
我使用bookshelf js构建了一个查询。当我在查询中使用orWhere时,会出现错误。

对象没有方法"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
        });
    });

你正在错误地使用它。或者应该在哪里使用查询回调函数。例如:model.query(function(qb) { qb.where(...).orWhere(...);}).then(...); - vbranden
3个回答

2

你需要使用包含在Bookshelf中的Knex查询构建器来完成这个操作,因为orWhere 是一个 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
我认为你应该给你的查询添加一个执行函数。
例如:...).query(qb => qb.where(第一个条件).orWhere(第二个条件)).fetch(...

1
请查看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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接