Поиск имени столбца, когда он хранится как идентификатор - PullRequest
0 голосов
/ 29 августа 2018

У меня есть таблица, где пользователи могут искать данные. Они вводят критерий поиска, и, если он соответствует любому из результатов таблицы, возвращаются результаты.

Это контроллер.

  $query = request('search-term');

      if(!empty($query))
      {
        $user = OnlineCounsellingApplication::where('name', 'like', $query)
                                              ->orWhere('email', 'like', $query)
                                              ->orWhere('country_id', 'like', $query)
                                              ->paginate(25)
                                              ->setPath('');}

Если пользователь выполняет поиск по электронной почте, эта запись будет отображаться.

Моя проблема в том, что если пользователь ищет страну, результаты не возвращаются, поскольку у меня есть страны, которые хранятся в виде идентификатора, который относится к имени в другой таблице. Он хранится как country_id. Запись изначально отображается так:

  @foreach($users as $row)
      <tr>
        <td>{!! $row->id !!}</td>
        <td>{!! $row->name ?: 'No Name Provided'!!}</td>
        <td>{!! $row->email !!}</td>
        <td>{!! $row->country['name'] ?: 'No Country Provided' !!}</td>
</tr>
@endforeach

Как принять строку в качестве ввода и выполнить поиск по идентификатору

1 Ответ

0 голосов
/ 29 августа 2018

Я думаю, вам нужен orWhereHas метод. Это будет выглядеть как

$searchTerm = request('search-term');

if(!empty($searchTerm)) {
    $user = OnlineCounsellingApplication::where('name', 'like', $searchTerm)
        ->orWhere('email', 'like', $searchTerm)
        ->orWhereHas('country', function ($query) use $searchTerm {
            $query->where('name', 'like', $searchTerm);
        })
        ->paginate(25)
        ->setPath('');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...