我正在尝试根据他们发布内容的类别以及用户直接通过搜索字符串过滤我的用户:
$users = User::when($search, function ($query) use ($request) {
$query->where('name', 'like', '%' . $request['search'] . '%')
->orWhere('email', 'like', '%' . $request['search'] . '%');
return $query;
})
->when($categories, function ($query) use ($request) {
return $query->whereHas('posts.category', function ($query) use ($request) {
$query->whereIn('name', $request['categories']);
});
})
->select('id', 'name', 'email')
->paginate(10);
当我只过滤类别(没有$search)时,它按预期工作,但只要我输入搜索字符串,结果就会被搜索字符串过滤,$request['search']但完全忽略类别过滤。
例如:
名为“Jon”的用户在“生活方式”类别中有一个帖子。
另一个名为“Jonn”的用户在“体育”类别中有一个帖子。
现在,如果我只过滤“体育”类别,我会得到正确的结果 ->“乔恩”。
但是,如果我使用搜索字符串“Jon”进行额外过滤,结果是 ->“Jon”和“Jonn”,这不是预期的结果,因为它应该过滤“Sports”并命名“%Jon%”,因此结果应该再次只是“乔恩”。
我不知道我怎么能实现该过滤器组合where()和whereHas()。
慕婉清6462132
慕雪6442864