gpt4 book ai didi

php - Eloquent 嵌套 WHERE 语句

转载 作者:搜寻专家 更新时间:2023-10-31 21:22:22 24 4
gpt4 key购买 nike

对于以拍摄某些物体为目标的在线比赛,我有用户上传物体图片,其中物体有类别子类别

用户的仪表板应如下所示:

  ------------------------------------------------ 
| 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();,但是我没有对象中的结构创建上面显示的所需 View 。

我怎样才能做这样的事情:

$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()部分即可。

如果您还想过滤子类别,请为 subcats 添加一个闭包到 with()

关于php - Eloquent 嵌套 WHERE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44054999/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com