laravel groupby 与数组

Posted

技术标签:

【中文标题】laravel groupby 与数组【英文标题】:laravel groupby with array 【发布时间】:2018-03-21 19:25:30 【问题描述】:

我有分类的帖子

 $response=Post::groupBy('post_category','id')->get();

上面的查询会按照分类顺序返回所有有分类的帖子。

现在我需要将所有帖子分组到类别中。现在我有一个可能的解决方案是我需要循环响应和内部循环我必须检查类别并创建数组。 是否有一个选项可以在类似groupconcat.的查询中使用它?

我的问题是:是否可以创建一个类别数组,所以数组的键是category_name 并且在类别内都是帖子

更新

张贴表

id | post_name | post_description | category_name | etc..

这里的类别名称没有使用任何其他表,因为它的预定义值如新闻、体育、板球之类的......当我在 categoryname 中插入新闻、体育、政治时。

【问题讨论】:

您能分享一下您的表架构吗? @sunitiyadav.updated 问题 @vision 你想要 category_name 上的数据透视表之类的东西吗? somethink 与您所说的类似,没有数据透视表。我只想将 baes 放在类别上。否则我必须循环它并创建一个数组。类似有很多 【参考方案1】:

以下代码将返回具有唯一 category_name 的帖子的键、值对

$response = Post::get()->groupBy('category_name');
/*
    [
        'category_1' => [
            ['category_name' => 'category_1', 'post_name' => 'Chair'],
            ['category_name' => 'category_1', 'post_name' => 'Bookcase'],
        ],
        'category_2' => [
            ['category_name' => 'category_2', 'post_name' => 'Desk'],
        ],
    ]
*/

【讨论】:

【参考方案2】:

您不能通过查询来做到这一点,SQL group by 将只保留一个类别的帖子,因此您的查询不正确。您正在寻找的是:

$response = Post::get();
$response = $response->groupBy('post_category');

它将返回以“post_category”为键并包含该类别的所有帖子的数组集合。

【讨论】:

@aaron0207.thanks a lot.this is what I was looking for.thanks a lot 很好,不客气,先生。如果这有效,您可以将其作为正确答案进行检查,以帮助未来的读者。也许你应该标记 Praveen 的答案,因为他的速度有点快 @aaron.i 喜欢你说接受 praveens 的回答的态度。即使我很困惑,因为你们都帮助了我。再次非常感谢。

以上是关于laravel groupby 与数组的主要内容,如果未能解决你的问题,请参考以下文章

Laravel groupBy 返回项目数组而不是使用日期作为键

Laravel使用groupBy与动态生成mysql表

Laravel Eloquent:与 groupBy 求和

Laravel MIN MAX GroupBy 来自集合

Laravel groupBy 不能与 PostgreSQL 一起正常工作

SQL基础教程(第2版)第3章 聚合与排序:3-2 对表进行分组