首页 > 解决方案 > 存储为 id 时搜索列名

问题描述

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

这是控制器。

  $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,这与另一个表上的名称相关。它存储为 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 搜索它

标签: laravellaravel-5eloquent

解决方案


我认为你需要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('');
}

推荐阅读