Поиск имени столбца, когда он хранится как идентификатор

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

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

  $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

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

попробуйте использовать объект отношения with(['country' => function($q) use ($name){ $q->where('name', $name)})

Mayuri Pansuriya 29.08.2018 11:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
0
1
32
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Думаю, вам нужен метод 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('');
}

Другие вопросы по теме