CakePHP:在相关模型下包含fieldname别名

时间:2011-07-16 20:41:56

标签: cakephp

我愿意按列对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模型下包含别名?

2 个答案:

答案 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