我需要在users
中搜索与名称的表,如果表中没有与任何名称匹配的表,则转移到与每个用户相关的类别表。
html的代码:
<form action="{{ route('search') }}" method="GET">
<input type="search" class="input" name="q" placeholder="Search">
</form>
Controller 代码(我的关闭):
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');
}
我需要说如果没有名称(用户表)检查类别一。
最佳答案
您将需要使用 orWhere 方法,这意味着 or 做另一个。为了避免奇怪的逻辑,将它包装在 where 闭包中是最简单的方法。
$users = User::where(function ($query) use($req) {
$query->where('name','LIKE','%'. $req .'%')
->orWhereHas('category', function ($query) use($req) {
$query->where('name','LIKE','%'. $req .'%');
});
});
这意味着您的代码将查找具有名称或给定类别的元素。有一个边缘情况,即使设置了用户,它也会通过类别名称找到。但是避免这种情况,并不像这样直接。
关于laravel - 如何在多列中搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59308398/