我有一个表,用户可以在其中搜索数据。他们输入搜索词,如果匹配,则返回任何表数据结果。
这是控制器。
$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('');}
如果用户搜索电子邮件,则会显示该电子邮件记录。
我的问题是,如果用户搜索一个国家/地区,则不会返回任何结果,因为我将国家/地区存储为ID,该ID与另一个表上的名称相关。它存储为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
如何接受字符串作为输入并根据ID搜索字符串
答案 0 :(得分:0)
我认为您需要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('');
}