我需要在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');
}
我要说的是,如果没有名称(用户表),请检查类别一。
答案 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 .'%');
});
});
这意味着您的代码将查找具有名称或给定类别的元素。在极端情况下,即使设置了用户,也会按类别名称查找。但是避免这种情况并不像这样简单。