Laravel - 根据Laravel中类似的id对记录进行分组

时间:2017-02-22 07:41:34

标签: php mysql laravel-5 group-by

如何根据Laravel中的类似ID对表记录进行分组 例如: 在mysql产品表中有类似cat id的以下记录  表名:产品

id:1 pro_name:xyz1 cat_id:55
id:2 pro_name:xyz2 cat_id:22
id:3 pro_name:xyz3 cat_id:55
id:4 pro_name:xyz4 cat_id:22

我想要做的是类似的cat_id应该创建它的数组。我尝试使用

    $all = Products::groupBy('cat_id')->get();

但它只显示每个类似cat_id的第一条记录。

输出我得到了:

  {
    "id": 1,
    "pro_name": "xyz1",
    "cat": "55",
    "created_at": "2017-02-09 13:09:13",
    "updated_at": "2017-02-18 11:56:04"
  },
  {
     "id": 2,
    "pro_name": "xyz2",
    "cat": "22",
    "created_at": "2017-02-22 06:04:23",
    "updated_at": "2017-02-22 06:04:23"
  }

我希望它应该在数组中显示所有类似id的记录 帮我这个

3 个答案:

答案 0 :(得分:1)

分组总结你的表,使用给定的参数(因此它只显示第一个,在Naincy的答案中,为分组元素计算总数)。

也许您正在寻找Order By?

$info = DB::table('Products')
     ->orderBy('cat_id')
     ->get();

您将从整个表中获得结果,按cat_id排序,并且必须检测何时手动更改类别。

另一种方法是获取不同的cat_id,然后对它们运行自己的查询。您可以将代码封装在模型或存储库中。请注意,这将在您的数据库上运行许多查询,这可能不是更好。

//Create an array
$groups = []

//Retrieve the list of cat_id's in use.
$cats = DB::table('Products')->distinct()->select('cat_id')->get()

//for each cat_id in use, find the products associated and then add a collection of those products to the relevant array element
foreach($cats as $cat){
    $groups[$cat->cat_id] = DB::table('Products')->where('cat_id', $cat->cat_id)->get();
}

注意:我唯一担心你在这里做的是你真的在寻找关系吗?如果您使用Eloquent,则所有这一切都变得非常简单。

答案 1 :(得分:0)

可以试试这个

$info = DB::table('Products')
         ->select('cat_id', DB::raw('count(*) as total'), 
             DB::raw("GROUP_CONCAT(pro_name) AS product_name"))
         ->groupBy('cat_id')
         ->get();

答案 2 :(得分:0)

您好,您应该尝试此代码...

$ row = Products :: selectRaw(" pro_name,cat_id")                  - > GROUPBY(" CAT_ID"" pro_name") - >得到();

            echo "<pre>";
            print_r($row);