我正在尝试做一个简单的搜索功能。为此,我实现了以下查询:
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
却不起作用,结果来自所有用户。
答案 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);