2016-01-05 23 views
2

我已經使用書架js構建了一個查詢。當我在查詢中使用orWhere時,它給出錯誤在書架上使用orWhere 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

您使用不正確。或者在哪裏應該使用查詢返回。像model.query(function(qb){qb.where(...)。orWhere(...);})。then(...); – vbranden

回答

2

你需要使用包含在書架上knex查詢生成器要做到這一點,因爲orWhere是knex功能(書架使用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(first condition).orWhere(second condition)).fetch(...

0

檢查出bookshelf-eloquent擴展,它直接在書架模型上顯示許多Knex.js函數。它還增加了LikeLike()和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();