Laravel雄辩 - 有条件数据获取



我有一个客户和客户组表。我想根据术语/过滤文本搜索客户。

说,有两个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();

最新更新