我有一个客户和客户组表。我想根据术语/过滤器文本搜索客户。
说,有两个customer_group_id,分别为7和8。当为8时,我需要在orWhere子句中找到移动字段,否则找不到。
我尝试过的是
$contacts = Contact::where(function ($query) use ($term) {
$query->where('contacts.name', 'like', '%' . $term .'%')
});
// For customer_group_id=8
$contacts->when('customer_group_id=8', function($q) use ($term){
return $q->orWhere('mobile', 'like', '%' . $term .'%');
});
when()
不起作用。它显示所有结果。我知道我必须在boolean value
函数的第一个参数中传递任何when()
。
这个问题有解决方案吗?还是我可以获取数据的另一种方式。
答案 0 :(得分:1)
when()
方法不会在查询中添加if语句,这只是一种避免在代码中编写if语句的方法。
要实现目标,可以使用嵌套的orWhere()
子句:
$contacts = Contact::where('name', 'like', '%' . $term . '%')
->orWhere(function ($query) use($term) {
$query->where('customer_group_id', 8)->where('name', 'like', '%' . $term . '%');
})
->get();
如果您查询的内容超出了您的疑问,那么您可以将以上内容包装在另一个where子句中:
$contacts = Contact::where(function ($query) use ($term) {
$query->where('name', 'like', '%' . $term . '%')
->orWhere(function ($query) use ($term) {
$query->where('customer_group_id', 8)->where('name', 'like', '%' . $term . '%');
});
})
->where('some column', 'some value')
->get();