Laravel 5.8:orWhere使wherehas产生作用

时间:2019-03-12 03:50:49

标签: laravel eloquent

我正在尝试做一个简单的搜索功能。为此,我实现了以下查询:

Profile::whereHas('accounts', function ($query) use ($id) { 
        $query->where('user_id', $id); 
    })
    ->where('username', 'LIKE', "%{$search}%")
    ->paginate(20);
  • whereHas选择具有$id的用户拥有的配置文件。
  • 然后,使用where,我们确定搜索是否与数据库中的某些用户名相匹配。
  • 最后,我们对结果进行分页。

到目前为止,很好。

当我添加一个orWhere时出现问题:

Profile::whereHas('accounts', function ($query) use ($id) { 
        $query->where('user_id', $id); 
    })
    ->where('username', 'LIKE', "%{$search}%")
    ->orWhere('fullname', 'LIKE', "%{$search}%")
    ->paginate(20);

我希望查询分析搜索是否与用户名和/或全名匹配。当我添加orWhere时有效,但是whereHas却不起作用,结果来自所有用户。

1 个答案:

答案 0 :(得分:2)

您需要这样做:

Profile::whereHas('accounts', function ($query) use ($id) { 
    $query->where('user_id', $id); 
})
->where(function($query) use ($search) {
    $query->where('username', 'LIKE', "%{$search}%")
          ->orWhere('fullname', 'LIKE', "%{$search}%");
})
->paginate(20);