【问题标题】:Using GROUP BY after executing a procedure in Laravel?在 Laravel 中执行过程后使用 GROUP BY?
【发布时间】:2021-12-31 18:42:35
【问题描述】:

执行程序后,我有这样的表

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 所以当我返回 JSON 时,它应该只获得每个 cat_name 的第一个值,就像这样(我需要 @987654325 @字段留)

| 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 集合进行分组非常简单。您尝试了什么,遇到了什么问题?
  • 好吧,我尝试使用简单的 groupBy 像 DB::select("CALL GetListCat()")->groupBy('cat_name')->get(); 并显示错误调用数组上的成员函数 groupBy()
  • 那是因为DB::select() 返回一个数组。请参阅下面的答案...

标签: laravel stored-procedures eloquent


【解决方案1】:

只需将您的数组变成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",
     ],
   ]

【讨论】:

    猜你喜欢
    • 2017-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多