一段时间以来,我一直对此感到烦恼,但我无法弄清楚(即使我知道这可能很简单)。我正在Laravel中迈出第一步,我想使用Eloquent建立这样的查询。
// This should be condition one
WHERE status NOT IN (4,99)
OR
// condition two
status NOT IN (4,99) AND ('column1' LIKE %XXXX% OR 'column2' LIKE %XXXX%)
我正在这样做:
$q->whereNotIn('order_stage_id', [99, 4])
->orWhere(function ($query) {
$query->whereNotIn('order_stage_id', [99, 4])
->orWhere('reference_number', 'like', '%'.$request->key.'%')
->orWhere('seller_remark', 'like', '%'.$request->key.'%')
->orWhere('companies.name', 'like', '%'.$request->key.'%')
->orWhere('users.name', 'like', '%'.$request->key.'%');
});
答案 0 :(得分:1)
根据您雄辩的代码,您当前的查询如下所示:
WHERE order_stage_id NOT IN (4,99) OR ( WHERE order_stage_id NOT IN (4,99) OR reference_number LIKE %XXXX% OR ...)
您需要使用where()
方法来获取SQL AND
运算符,然后使用闭包嵌套orWhere()
方法。
$q->whereNotIn('order_stage_id',[99,4])
->orWhere(function($query) {
$query->whereNotIn('order_stage_id',[99,4])
->where(function($query) {
$query->where('column_1', 'like', '%XXX%')
->orWhere('column_2', 'like', '%XXX%')
->orWhere('column_2', 'like', '%XXX%');
});
});
别忘了,您需要将$request
对象传递给每个闭包才能访问它:
->where(function($query) use ($request) {