У меня есть таблица, в которой пользователи могут искать данные. Они вводят поисковый запрос, и если он соответствует любому из результатов данных таблицы, возвращаются.
Это контроллер.
$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
Как принять строку в качестве ввода и искать ее по идентификатору






Думаю, вам нужен метод 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('');
}
попробуйте использовать объект отношения
with(['country' => function($q) use ($name){ $q->where('name', $name)})