在eloquent ORM中对两个查询的结果进行分组

时间:2017-08-12 22:07:26

标签: php mysql laravel laravel-eloquent

我正在尝试构建像reddit这样的审核报告队列。在队列中,我希望一起显示帖子和评论,但我能得到的只有一个,或者有两个查询:

//Get all posts with reports
Post::whereHas('reports')->with('reports.user')->latest()->get();
// Get all comments with reports
Comment::whereHas('reports')->with('reports.user')->latest()->get();

与评论,帖子和报告存在多态关系。表

以下是帖子的输出:

{
 "id": 7,
 "author_id": 1,
 "title": "A forum post!",
 "body": "<p>Some Forum post content</p>",
 "created_at": "2017-08-08 23:03:22",
 "updated_at": "2017-08-08 23:03:22",
 "reports": [
   {
      "id": 5,
      "user_id": 1,
      "content": "Rule 1",
      "reportable_id": 7,
      "reportable_type": "App\\Post",
      "created_at": "2017-08-11 19:32:02",
      "updated_at": "2017-08-11 19:32:02",
      "user": {
        "id": 1,
        "role_id": 1,
        "name": "Admin",
        "created_at": "2017-08-01 18:37:18",
        "updated_at": "2017-08-10 18:59:52"
       }
      }
     ]
},

我如何查询帖子和评论?

修改的 我不想急于在帖子中加载评论。我想加入我上面列出的两个查询。我觉得在阅读之后我需要在两个查询之间创建union,因为我不认为我可以将它们加在一起。我不知道该怎么做。

1 个答案:

答案 0 :(得分:0)

为什么不从报告模型开始,而不是使用帖子或评论作为起点接近这个?你说你正在建立一个“审核报告队列”,这表明查询报告表(以及加入评论/帖子)可能是一个更自然的解决方案。

range

在PR https://github.com/laravel/framework/pull/13737

中向Laravel添加了预先加载