在cakephp 3中选择按月分组的记录计数

在cakephp 3中选择按月分组的记录计数,cakephp,cakephp-3.x,Cakephp,Cakephp 3.x,我使用的是cakephp3.x+ 我必须在页面上显示一个图表,因此我想为此构建脚本 我必须选择当前年度的按月记录组计数 这就是我尝试过的 $graph = $this->GenerateVideos->find() ->select('COUNT(id)', 'MONTH(created)') ->where(['YEAR(created)' => date('Y')]) ->group(['MONTH(crea

我使用的是
cakephp3.x+

我必须在页面上显示一个图表,因此我想为此构建脚本

我必须选择当前年度的按月记录组计数

这就是我尝试过的

$graph = $this->GenerateVideos->find()
        ->select('COUNT(id)', 'MONTH(created)')
        ->where(['YEAR(created)' => date('Y')])
        ->group(['MONTH(created)']);
这会生成类似sql的

'sql' => 'SELECT GenerateVideos.COUNT(id) AS GenerateVideos__COUNT(`id`) FROM generate_videos GenerateVideos WHERE YEAR(created) = :c0 GROUP BY MONTH(created) ',
'params' => [
    ':c0' => [
        'value' => '2018',
        'type' => null,
        'placeholder' => 'c0'
    ]
],
但这会给出错误为

Error: SQLSTATE[42000]: Syntax error or access violation: 
1064 You have an error in your SQL syntax; check the manual that 
corresponds to your MySQL server version for the right syntax to use near '(`id`) 
FROM generate_videos GenerateVideos WHERE YEAR(created) = '2018' GROUP BY' at line 1 

尝试在
->select()值中使用数组:

->select(['COUNT(id)', 'MONTH(created)'])
,它始终显示一个数组,并且似乎没有使用第二个选择值

或者,根据,您可以尝试以下方法:

$query = $this->GenerateVideos->find();
$query->select(['count' => $query->func()->count('id'), 'month' => 'MONTH(created)']);
$query->where(['YEAR(created)' => date('Y')])
$query->group(['month' => 'MONTH(created)']);

可能与我在下面尝试的脚本重复,但它给出的错误为
错误:SQLSTATE[42000]:语法错误或访问冲突:1064您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解使用以下语法的正确性:“(
created
)FROM GenerateVideos WHERE YEAR(created)=”2018“GRO”在第1行
生成的脚本显示为
SELECT(COUNT(id))AS
COUNT
,GenerateVideos.MONTH(created)AS GenerateVideos\uu MONTH(
created
)从generate_videos GenerateVideos WHERE YEAR(created)=:c0 groupby MONTH(created)
得到它,将
MONTH(created)
更改为
'MONTH'=>'MONTH(created)
正在工作