Laravel 5.8: или где аннулирует эффект whereHas - PullRequest
1 голос
/ 12 марта 2019

Я пытаюсь сделать простую функцию поиска.Для этого я реализовал следующий запрос:

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 Ответ

2 голосов
/ 12 марта 2019

Вам нужно сделать это так:

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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...