【问题标题】:How to group records in year and month? laravel如何按年和月对记录进行分组?拉拉维尔
【发布时间】:2020-02-14 01:31:27
【问题描述】:

我已经去过这个link,但我的情况不同。

我有一个记录,其中有一列 created_at。我的目标是按年份对记录进行分组,并且在每年的内部,记录也应该按月份分组。

我的期望


我在下面尝试过这段代码,但它只适用于每年。

$records = \App\VehicleRental::query()
    ->where('operator_id', $operator->id)
    ->get()
    ->groupBy(function($val) { return \Carbon\Carbon::parse($val->created_at)->format('Y'); });

所以我尝试将另一个组放在一个月,但错误 此集合实例上不存在属性 [created_at]。 返回

$record = \App\VehicleRental::query()
    ->where('operator_id', $operator->id)
    ->get()
    ->groupBy(function($val) { return \Carbon\Carbon::parse($val->created_at)->format('M'); })
    ->groupBy(function($val) { return \Carbon\Carbon::parse($val->created_at)->format('Y'); });


有人知道如何实现这一目标吗?

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

    您还可以将元素数组传递给groupBy() 集合方法,用于嵌套分组。试试这个:

    $record = \App\VehicleRental::query()
        ->where('operator_id', $operator->id)
        ->get()
        ->groupBy([
            function ($val) { return $val->created_at->format('Y'); },
            function ($val) { return $val->created_at->format('m'); },
        ]);
    

    附带说明,created_at 可以直接转换为 Carbon 实例。如果上述方法不起作用,请在您的模型中定义属性date mutator

    # VehicleRental.php
    
    protected $dates = ['created_at', 'updated_at'];
    

    【讨论】:

    • 先生,月份没有排序。不知道如何附加->sortBy(created_at) 你能帮我一个忙吗
    • 然后先排序:\App\VehicleRental::query()->orderBy('created_at')->where(...)->get()->[...]
    • @charles 你没有在你的问题中提到任何log_in。更新您的帖子以查看其中的逻辑。
    • 它是created_at 先生。很多标签在这里抱歉。由我尝试->orderBy('created_at') ->get() ->groupBy(,但仍然几个月没有排序。只有一年
    猜你喜欢
    • 2015-10-30
    • 2020-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-07
    相关资源
    最近更新 更多