我有一个客户和客户组表。我想根据术语/过滤文本搜索客户。
说,有两个Customer_Group_ID,7和8。当8时,我需要在OR Where子句中找到移动字段,否则不会。
我尝试的是
$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()
不起作用。它显示了所有结果。我知道我已经通过when()
功能中的任何boolean value
第一个参数。
有没有解决此问题的解决方案?或我可以获取数据的其他方式是什么。
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();
如果您的查询比您提出的问题要多,那么您可以简单地将上述内容包裹在另一个条款中:
$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();