0

我正在尝试在 cakephp3 中按年份分组。我可以使用以下方式获取数据,但它仍然没有按年份分组(我想要的方式。)

$query = $this->Alerts->query();
$year = $query->func()->year([
    'added_on' => 'literal'
]);

$month = $query->func()->monthname(['added_on' => 'literal']);
$monthAlertsCount = $query->func()->count($month);
$data = $query
    ->select([
        'year' => $year,
        'month' => $month,
        'count' => $monthAlertsCount
    ])
    ->group($year)
    ->group($month);

$status = "success";
$this->set('response', $status);
$this->set('year', $data);
$this->set('_serialize', ['response','year']);

电流输出如下:

{

    "response":"success",
    "year":[
        {
            "year":"2013",
            "month":"November",
            "count":"1"
        },
        {
            "year":"2014",
            "month":"February",
            "count":"2"
        },
        {
            "year":"2014",
            "month":"January",
            "count":"3"
        },
        {
            "year":"2015",
            "month":"December",
            "count":"6"
        },
        {
            "year":"2015",
            "month":"February",
            "count":"3"
        },
        {
            "year":"2015",
            "month":"January",
            "count":"4"
        },
        {
            "year":"2016",
            "month":"January",
            "count":"83"
        }
    ]

}

预期输出:

{

    "response":"success",
    "year":[
        {
            "2013":[
                {
                    "month":"November",
                    "count":"1"
                }
            ],
            "2014":[
                {
                    "month":"February",
                    "count":"2"
                },
                {
                    "month":"January",
                    "count":"3"
                }
            ],
            "2015":[
                {
                    "month":"December",
                    "count":"6"
                },
                {
                    "month":"February",
                    "count":"3"
                },
                {
                    "month":"January",
                    "count":"4"
                }
            ],
            "2016":[
                {
                    "month":"January",
                    "count":"83"
                }
            ]
        }
    ]

}

任何人都可以帮我在 cakephp3 中获得预期的输出吗?

4

1 回答 1

0

使用集合方法groupBy()——记住,查询是集合对象(有点)!

$data = $query
    ->select([
        'year' => $year,
        'month' => $month,
        'count' => $monthAlertsCount
    ])
    ->group($year)
    ->group($month)
    ->groupBy('year');

这将创建所需的分组结构,但是它不会year从各个行中删除该字段,如果要删除它们,请使用映射器,例如

// ...
->groupBy('year')
->map(function ($rows) {
    foreach ($rows as &$row) {
        unset($row['year']);
    }
    return $rows;
});

也可以看看

于 2016-01-13T07:16:50.443 回答