在多个地方有

时间:2018-08-14 13:10:09

标签: php laravel laravel-5 eloquent

我需要能够一次对模型及其多个关系运行一次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.namecontact.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') . '%');
);

这样我就可以搜索用户,联系人,照片和状态表/关系以查找搜索输入。

最干净/最好的方法是什么?

2 个答案:

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