当前位置: 首页 > 面试题库 >

雄辩的嵌套WHERE语句

鲜于宏义
2023-03-14
问题内容

对于拍摄特定的对象我有目标的一个在线竞赛 用户 上传 图片对象 ,其中对象具有 类别子类别

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

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

如果你也想过滤的子类别,封闭增加with()subcats



 类似资料:
  • 问题内容: 我正在尝试使用Eloquent在数据库种子期间执行以下查询: 这是我在Eloquent中的实现: 尽管第一个查询始终返回完整结果,但Eloquent等价项始终为表的和字段以外的所有内容返回空元素。由于和模型都是工匠生成的骨架,因此我无所适从。 例如: 这是当我对种子(最初由Faker生成)的第一个口才查询dd()时输出的数组: 问题答案: 可以通过指定特定表中所需的特定列名来解决,如下

  • 你一定看过下面的功能(在facebook上),一个有一些评论的帖子,每个评论都有一个类似的计数器。 https://img4.hostingpics.net/pics/67853820170616003640LaravelNewsAccueil.png 在拉雷维尔,这将是类似的 帖子有很多评论 以下评论发布 类似于用户的评论 CommentLike belong评论 评论有很多类似的评论 所以,现

  • 我试图搜索所有的租金,有一个RentItem的书名像给定的$input。 问题是当输入不匹配时,我仍然返回一个集合。唯一的区别是book关系是null而不是Collection。 当book等于null时,我不希望租金模型被退回。 我的查询 租金模型关系 我做过的研究: https://laracasts.com/discuss/channels/laravel/eloquent-nested-r

  • 我有以下三个表格: 帖子 帖子: 评论: 标签: Post表有许多注释,comments表有许多与之关联的标记。 如何使用“快速加载”将所有这些表组合在一起? 比如: 但是这个查询总是在标记关系中返回空响应。 我做错了什么? 期望的结果是这样的: 你可以看到帖子里面包含评论,评论里面也包含标签关系。 另外,我在我的项目中使用了“jenssegers/laravel mongodb”包,我试图在没有

  • 我对雄辩的质询有意见。我正在使用渴望加载(一对多多态关系)来排序“historyable”。日期见下文。 我试着得到这样的结果 是否有可能运行嵌套懒惰渴望加载Laravel? 产品型号 历史模型 产品控制器 我有这样的数据库

  • 我尝试从带有多个where和/或子句的表中获得结果。