当存储为ID时搜索列名

时间:2018-08-29 09:22:41

标签: laravel laravel-5 eloquent

我有一个表,用户可以在其中搜索数据。他们输入搜索词,如果匹配,则返回任何表数据结果。

这是控制器。

  $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搜索字符串

1 个答案:

答案 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('');
}