我正在使用Laravel 5.2
我构建了一个查询来检索一些订单。 该查询最多可以使用三个过滤器
如果用户过滤了order type
和/或order status
,则说明工作正常。
如果一个过滤器仅获取sent
订单但输入Anna
,则会获得Type B
订单,因为它是in progress
我知道这是由与添加where
和orWhere
相关的内容引起的,但我无法找到解决方案。
+------------+--------------+----------+--+
| Order type | Order status | Username | |
+------------+--------------+----------+--+
| Type A | Sent | Jack | |
| Type B | In Progress | Anna | |
+------------+--------------+----------+--+
if (request()->has('order_type')) {
$orderLines->where('orders.order_type', request('order_type'));
}
if (request()->has('order_status')) {
$orderLines->where('order_status.name', request('order_status'));
}
if (request()->has('keyword')) {
$orderLines->where('order_line_items.last_activity','like', '%'.request('keyword') .'%')
->orWhere('users.first_name','like', '%'.request('keyword') .'%')
->orWhere('users.last_name','like', '%'.request('keyword') .'%')
->orWhere('users.username','like', '%'.request('keyword')
}
答案 0 :(得分:0)
您应该将闭包传递给orWhere
,以便能够将括号中的语句分组。像这样:
$orderLines->where('order_line_items.last_activity','like', '%'.request('keyword') .'%')
->orWhere(function ($query) {
$query->orWhere('users.first_name','like', '%'.request('keyword') .'%')
->orWhere('users.last_name','like', '%'.request('keyword') .'%')
->orWhere('users.username','like', '%'.request('keyword')
})
在文档here中阅读更多内容。 Parameter Grouping
部分。
答案 1 :(得分:0)
if (request()->has('keyword')) {
$orderLines->where(function ($query) {
$query->orWhere('order_line_items.last_activity','like', '%'.request('keyword') .'%')
->orWhere('users.first_name','like', '%'.request('keyword') .'%')
->orWhere('users.last_name','like', '%'.request('keyword') .'%')
->orWhere('users.username','like', '%'.request('keyword') .'%')
}
}