我愿意按列对MySQL结果进行分组,并计算属于同一类别的记录:
$this->find('all', array(
'fields' => array('UserCheckin.id', 'UserCheckin.capital_id', 'COUNT(UserCheckin.id) as capital_checkins'),
'group' => 'UserCheckin.capital_id'
));
问题是capital_checkins
在返回的数组中被分组为一个单独的键,而我希望它在UserCheckin
模型下。以下是结果的返回方式:
Array
(
[0] => Array
(
[UserCheckin] => Array
(
[id] => 3
[capital_id] => 10
)
[0] => Array
(
[capital_checkins] => 2
)
[Capital] => Array
(
[id] => 10
[name] => London
)
)
[1] => Array
(
...
)
)
有没有办法在UserCheckin
模型下包含别名?
答案 0 :(得分:3)
在cakephp 1.3中,您可以使用virtual field:
在您的UserCheckin
模型中:
var $virtualFields = array(
'capital_checkins' => 'COUNT(UserCheckin.id)'
);
重要更新:正如@Rob Wilkerson正确注意到的那样,将具有聚合功能的虚拟字段永久添加到您的模型中[可能]会弄乱您的find
查询,而这些查询没有{ {1}}(隐式地对MySQL中的所有行进行分组,或者只是在SQL Server中出现SQL错误)。解决方案是在使用它的查询之前临时在运行时添加虚拟字段:
GROUP BY
答案 1 :(得分:0)
'COUNT(UserCheckin.id) as UserCheckin__capital_checkins'
http://book.cakephp.org/2.0/en/models/virtual-fields.html#virtual-fields-in-sql-queries