参加一个在线竞赛,目标是拍摄我所拥有的某些物体users上传中pictures of objects,其中对象有一个category and a 子类别.
用户的仪表板应如下所示:
------------------------------------------------
| Category |
------------------------------------------------
| ----------------------------------------- |
| | Subcat. | Subcat. | |
| |------------------|--------------------| |
| |Object1 | Object2 | Object1 | Object2 | |
| |------------------|--------------------| |
| | Pic1 | Pic1 | Pic1 | Pic1 | |
| | Pic2 | Pic2 | Pic2 | Pic2 | |
| ---------------------------------------- |
| |
------------------------------------------------
为了能够在适当的循环中输出图片,我安装了hasMany模型之间的关系。所以我可以通过以下方式获得具有方便层次结构的对象
$userPics = Category::with(['subcats','subcats.objects','subcats.objects.pics'])->get();
问题:
当然,对于仪表板,我只想要来自某个用户的图像:Pictures模型包含一个user_id场地。我可以直接获取用户的图片:Pictures::where('user_id',$user->id)->get();
,但是对象中没有结构来创建上面显示的所需视图。
我怎样才能做这样的事情:
$userPics = Category::with([...])->where('user_id',$user->id)->get();
非常感谢您的任何提示!
您想要获取包含属于指定用户的图片的类别,因此您可以这样做(有点冗长):
Category::with(['subcats', 'subcats.objects' => function ($q) use ($user) {
$q->with(['pictures' => function ($q) use ($user) {
$q->where('user_id', $user->id);
}]);
}])
->whereHas('subcats', function ($q) use ($user) {
$q->whereHas('objects', function ($q) use ($user) {
$q->whereHas('pictures', function ($q) use ($user) {
$q->where('user_id', $user->id);
});
});
})
->get();
您需要使用嵌套with()
此处的闭包,因为您可以使用点符号加载两个以上级别的关系。
如果不需要加载图片和子类别数据,直接去掉with()
part.
如果您还想过滤子类别,请添加一个闭包with()
for subcats
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)