在 Laravel 中执行过程后使用 GROUP BY?
Using GROUP BY after executing a procedure in Laravel?
执行程序后我有 table 这样的
SELECT ROW_NUMBER() OVER(ORDER BY t.name)new_id,
t.name AS cat_name,
f.id AS id_food
FROM food AS f
INNER JOIN categories AS t
ON t.id = f.id_cat
WHERE f.quantity > 0
ORDER BY t.name
| new_id | cat_name | id_food |
|---- |------ | ----- |
| 1 | Seafood | 1 |
| 2 | Seafood | 3 |
| 3 | Seafood | 5 |
| 4 | Beef | 2 |
| 5 | Beef | 16 |
| 6 | Special | 7 |
这是我的控制器和 JSON 来自程序的值
public function first(){
$fi = DB::select("CALL GetListCat()");
return response()->json($fi);
}
Result: [{"new_id":1,"cat_name":"Seafood"},
{"new_id":2,"cat_name":"Seafood"},
{"new_id":3,"cat_name":"Seafood"},
{"new_id":4,"cat_name":"Beef"},
{"new_id":5,"cat_name":"Beef"},
{"new_id":6,"cat_name":"Special"}]
现在我想在 cat_name
字段上使用 GROUP BY 所以当我 return a JSON 时,它应该只得到每个 cat_name
的第一个值是这样的(我需要保留 new_id
字段)
| new_id | cat_name | id_food |
|---- |------ | ----- |
| 1 | Seafood | 1 |
| 4 | Beef | 2 |
| 6 | Special | 7 |
Result desired: [{"new_id":1,"cat_name":"Seafood"},
{"new_id":4,"cat_name":"Beef"},
{"new_id":6,"cat_name":"Special"}]
我怎样才能做到这一点?
只需将您的数组转换为 Laravel collection,这样您就可以更轻松地对其进行操作:
$fi = [
["new_id" => 1, "cat_name" => "Seafood"],
["new_id" => 2, "cat_name" => "Seafood"],
["new_id" => 3, "cat_name" => "Seafood"],
["new_id" => 4, "cat_name" => "Beef"],
["new_id" => 5, "cat_name" => "Beef"],
["new_id" => 6, "cat_name" => "Special"],
];
$coll = collect($fi)->unique("cat_name");
dump($coll->values()->all());
输出:
=> [
[
"new_id" => 1,
"cat_name" => "Seafood",
],
[
"new_id" => 4,
"cat_name" => "Beef",
],
[
"new_id" => 6,
"cat_name" => "Special",
],
]
执行程序后我有 table 这样的
SELECT ROW_NUMBER() OVER(ORDER BY t.name)new_id,
t.name AS cat_name,
f.id AS id_food
FROM food AS f
INNER JOIN categories AS t
ON t.id = f.id_cat
WHERE f.quantity > 0
ORDER BY t.name
| new_id | cat_name | id_food |
|---- |------ | ----- |
| 1 | Seafood | 1 |
| 2 | Seafood | 3 |
| 3 | Seafood | 5 |
| 4 | Beef | 2 |
| 5 | Beef | 16 |
| 6 | Special | 7 |
这是我的控制器和 JSON 来自程序的值
public function first(){
$fi = DB::select("CALL GetListCat()");
return response()->json($fi);
}
Result: [{"new_id":1,"cat_name":"Seafood"},
{"new_id":2,"cat_name":"Seafood"},
{"new_id":3,"cat_name":"Seafood"},
{"new_id":4,"cat_name":"Beef"},
{"new_id":5,"cat_name":"Beef"},
{"new_id":6,"cat_name":"Special"}]
现在我想在 cat_name
字段上使用 GROUP BY 所以当我 return a JSON 时,它应该只得到每个 cat_name
的第一个值是这样的(我需要保留 new_id
字段)
| new_id | cat_name | id_food |
|---- |------ | ----- |
| 1 | Seafood | 1 |
| 4 | Beef | 2 |
| 6 | Special | 7 |
Result desired: [{"new_id":1,"cat_name":"Seafood"},
{"new_id":4,"cat_name":"Beef"},
{"new_id":6,"cat_name":"Special"}]
我怎样才能做到这一点?
只需将您的数组转换为 Laravel collection,这样您就可以更轻松地对其进行操作:
$fi = [
["new_id" => 1, "cat_name" => "Seafood"],
["new_id" => 2, "cat_name" => "Seafood"],
["new_id" => 3, "cat_name" => "Seafood"],
["new_id" => 4, "cat_name" => "Beef"],
["new_id" => 5, "cat_name" => "Beef"],
["new_id" => 6, "cat_name" => "Special"],
];
$coll = collect($fi)->unique("cat_name");
dump($coll->values()->all());
输出:
=> [
[
"new_id" => 1,
"cat_name" => "Seafood",
],
[
"new_id" => 4,
"cat_name" => "Beef",
],
[
"new_id" => 6,
"cat_name" => "Special",
],
]