首页 > 解决方案 > Laravel - 资源计数月份日期

问题描述

我使用 Laravel eloquent 模型从数据库中获取数据。获取所有具有过去 6 个月历史记录的用户。

数据库结果:

 {
            "id": 2,
            "permissions": 3,
            "is_banned": 0,
            "datetime_last_logged": "2020-04-20 09:59:25",
            "last_login_ip": "127.0.0.1",
            "is_deleted": 0,
            "logged": [
                {
                    "id": 9,
                    "user_id": 2,
                    "datetime_logged": "2020-04-20T07:59:22.000000Z",
                    "datetime_loggout": null,
                    "login_ip": "127.0.0.1"
                },
                {
                    "id": 10,
                    "user_id": 2,
                    "datetime_logged": "2020-04-18T07:59:22.000000Z",
                    "datetime_loggout": null,
                    "login_ip": "127.0.0.1"
                },
                {
                    "id": 11,
                    "user_id": 2,
                    "datetime_logged": "2020-01-20T08:59:23.000000Z",
                    "datetime_loggout": null,
                    "login_ip": "127.0.0.1"
                },
                {
                    "id": 12,
                    "user_id": 2,
                    "datetime_logged": "2020-03-20T08:59:25.000000Z",
                    "datetime_loggout": null,
                    "login_ip": "127.0.0.1"
                }
            ]

我需要从我的记录字段中获取计数值,例如: October - 0, December - 0, January - 1, February - 0, March -1, April - 2

我怎样才能做到这一点?

标签: phparrayslaravelmodelresources

解决方案


如果您要对这些数据进行大量工作,我建议您在表中创建一个新列,以便您可以更轻松地进行过滤。

你可以得到一个月的碳:

$date = Carbon::parse('2020-03-20T08:59:25.000000Z')->format('F');

输出:

March

此外,您可以制作 foreach:

$logs= [];
foreach($users as $user){
  $date = $user->datetime_logged;
  $month = Carbon::parse($date)->format('F');
  $logs [] = $month;
}

在这里你有所有月份的数组,你只需要计算所有月份:

$count = array_count_values($logs);

输出:

Array
(
  [January] => 2
  [February] => 2
)

https://www.php.net/manual/en/function.array-count-values.php


推荐阅读