关联查询如何模糊查询关联表 B 的某个字段的值 [已解决,但是不明白,求解答]
如:
数据表
用户表 user
id name
栏目表 categories
id name
文章表 article
id title content user_id categorie_id
需求
1.列出所有的文章
1 文章1 作者1
2 文章2 作者2
3 文章3 作者3
4 文章4 作者4
5 文章5 作者5
2.加上一个搜索作者的input框,输入作者的名字然后查询出这个作者下面的所有文章,,,,,就是这 卡住了我的脖子
3.加上一个下拉框,如果选择了栏目就查询当前栏目下面的所有文章
我的做法
在模型中已经做好的关联 如with
$articles = Article::with(['user','categories'])
->when($request->get('categorie_id'), function ($query, $categorie_id) {\
return $query->where('categorie_id', $e);\
})
//使用when方法进行判断
->when($request->get('title'), function ($query, $title) {
$query->whereHas('user', function () use ($query,$title) {
return $query->where('name', 'like','%'.$name.'%');
});
})
->orderBy('created_at','desc')
->paginate(15);
我还天真的认为这个方法也可以!!!!
->when($request->get('title'), function ($query, $title) {
return $query->where('user.name', 'like','%'.$title.'%');
})
然后自己尝试了下,竟然解决了,但是不懂为啥
我看手册 需要加一个 Builder ,然后我就改成了 下面语法 竟然成功查询出来了 之前的我随便勾选的栏目也查询了出来,问题是我没有传递 $query 啊, 他怎么查询的?Builder 能把 之前的 查询 栏目后的 $query语句给i装进去???
$query->whereHas('user', function (Builder $query) use ($title) {
return $query->where('name', 'like','%'.$name.'%');
});
问题是 when方法里面 ,我没有传递之前的查询栏目的 $query ,竟然 也可以根据栏目 和 模糊的名字查询出来 案例说 应该这么写
$query->whereHas('user', function ($query) use ($title) {
return $query->where('name', 'like','%'.$name.'%');
});
我试了也可以查询成功
推荐文章: