我需要能够一次对模型及其多个关系运行一次where查询。此刻,我正在为单个关系做这样的事情
$users = $users->whereHas('contacts', function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->input('filters_search') . '%')
->orWhere('contact_name', 'like', '%' . $request->input('filters_search') . '%');
);
因此,这会在我的user.name
和contact.name
字段中搜索搜索输入,但是我需要能够搜索多个关系,而不仅仅是contacts
。像这样
$users = $users->whereHas(['contacts','photos','status'], function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->input('filters_search') . '%')
->orWhere('contact_name', 'like', '%' . $request->input('filters_search') . '%');
);
这样我就可以搜索用户,联系人,照片和状态表/关系以查找搜索输入。
最干净/最好的方法是什么?
答案 0 :(得分:0)
如果您碰巧在所有表中搜索相同的列,则可以将闭包提取到变量中:
$closure = function ($query) use ($request) {
$query->where('name', 'like', '%' . $request->input('filters_search') . '%')
->orWhere('contact_name', 'like', '%' . $request->input('filters_search') . '%');
}
但是您仍然必须独立查询每个关系:
$users->whereHas('contacts', $closure)
->orWhereHas('photos', $closure)
->orWhereHas('status', $closure);
答案 1 :(得分:0)
您应该尝试以下操作:
$users = $users->whereHas('photos','status', function($query) {
$query->where('name', 'like', '%' . $request->input('filters_search') . '%');
});
$users = $users->whereHas('contacts', function($query) use ($request) {
$query->where('contact_name', 'like', '%' . $request->input('filters_search') . '%');
});
OR ,您应该尝试以下方式:
User::where('name', 'like', '%' . $request->input('filters_search') . '%')
->whereHas('contacts', function($query) use ($request) {
$query->where('contact_name', 'like', '%' . $request->input('filters_search') . '%');
})
->get();