如何根据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的记录 帮我这个
答案 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);