【问题标题】:How do I change the key values after a groupBy in eloquent?如何在 eloquent 中更改 groupBy 后的键值?
【发布时间】:2019-09-14 04:15:05
【问题描述】:

我已按记录的创建月份对记录列表进行了分组:

$jobListings = JobListing::with('company')->orderBy('created_at')->get();

$jobListings = $jobListings->groupBy(function($j) {
    return Carbon::parse($j->created_at)->format('m');
});

return response()->json($jobListings);

这将给我一个 JSON 对象,其中包含按月份以数字格式键入的记录:

{
  "03": [...],
  "04": [...],
}

如何更改此 Eloquent 集合的键,以便将月份读取为“March”和“April”之类的单词?

明确地说,我想输出的是:

{
  "March": [...],
  "April": [...],
}

This answer 显示如何将数字转换为月份。

运行groupBy 后如何更改此集合上的键?

【问题讨论】:

    标签: php laravel laravel-5 eloquent laravel-collection


    【解决方案1】:

    您可以尝试使用 format('F')

             return Carbon::parse($j->created_at)->format('F');
    

    【讨论】:

    • @J.A.Streich 表示 OP 应根据 format('m') 添加明确的 order by 子句..
    • 我在问这是否是绝对必要的。由于对象已经在 groupBy 之前由 create_at 排序;并且它们与之前的 groupBy 是一致的...所以,我很好奇您的答案是否保持了 OP 的 groupBy 或者是否需要另一个 sortBy 进行此更改。
    • group by 返回(自然)基于返回值的排序.. 在这种情况下返回字符串名称而不是按月份顺序排序..
    • Carbon::parse() 这里不需要,因为 eloquent 已经将其解析为 Carbon 实例。直接使用。 $j->created_at->format('F')
    猜你喜欢
    • 2020-01-30
    • 1970-01-01
    • 2022-12-11
    • 2020-12-19
    • 2013-11-30
    • 1970-01-01
    • 1970-01-01
    • 2021-04-10
    • 2019-08-22
    相关资源
    最近更新 更多