執行程式后,我有這樣的表
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"}]
現在我想在欄位上使用GROUP BYcat_name 所以當我回傳一個 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"}]
我怎樣才能做到這一點?
uj5u.com熱心網友回復:
只需將您的陣列轉換為Laravel 集合,您就可以更輕松地對其進行操作:
$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",
],
]
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/399636.html
