如何在多列中搜索?

时间:2019-12-12 15:55:09

标签: laravel

我需要在users表中搜索名称,并且在将表转移到与每个用户都有关系的类别表中时,如果没有任何名称匹配。

html代码:

 <form action="{{ route('search') }}" method="GET">
   <input type="search" class="input" name="q" placeholder="Search">
 </form>

控制器代码(我关闭了):

public function search(Request $request)
{
  $users = new User;

  $req = $request->input('q');

  $users = $users->where('name','LIKE','%'. $req .'%')->whereHas('category', function ($query) use($req) {
    $query->where('name','LIKE','%'. $req .'%');
  });

  $users = $users->unverified()->active()->orderBy('id','desc')->paginate(16);
  return view('frontend.search.search', compact('users'));

}

类别与用户有关:

public function category()
{
    return $this->belongsTo('App\Category');
}

我要说的是,如果没有名称(用户表),请检查类别一。

1 个答案:

答案 0 :(得分:2)

您将需要使用orWhere方法,这意味着要执行另一个操作。为避免逻辑古怪,将其包装在where闭包中是最简单的方法。

$users = User::where(function ($query) use($req) {
    $query->where('name','LIKE','%'. $req .'%')
        ->orWhereHas('category', function ($query) use($req) {
            $query->where('name','LIKE','%'. $req .'%');
        });
});

这意味着您的代码将查找具有名称或给定类别的元素。在极端情况下,即使设置了用户,也会按类别名称查找。但是避免这种情况并不像这样简单。