Laravel Eloquent-条件数据获取

时间:2019-05-26 07:04:30

标签: php laravel eloquent

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

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

这个问题有解决方案吗?还是我可以获取数据的另一种方式。

1 个答案:

答案 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();