与CakePHP 2.0+中的Group By分页

时间:2012-10-23 16:58:46

标签: cakephp group-by cakephp-2.2 paginate

在CakePHP中对使用GROUP BY的结果进行分页时,结果数量计数不正确。这是一个记录在案的项目,可以预期,但根据this page in the CakePHP book

  

在CakePHP 2.0中,您不再需要在何时实现paginateCount()   使用组条款。核心查找('count')将正确计算   总行数。

我正在使用CakePHP 2.2.3,但我仍然遇到了问题。我需要做些什么吗?我误读了这个陈述吗?我是否仍需要使用自定义paginate()和/或paginateCount方法?

澄清“错误计数”:我正在加入table1 w / table2 - 所以即使我只有一个“table1项目”,它会检索2行...但是我分组了到table1项的id,这使它只返回1项。但是,计数显示“2找到”,但只显示1项。

更新:(代码)

$this->Paginator->settings = array(
'limit' => (int) 20,
'conditions' => array(
    (int) 0 => array(
        'Article.node_type_id' => '5050ede8-3f88-45f4-b58f-1130d9d84497'
    ),
    (int) 1 => array(
        'OR' => array(
            'DataText.title LIKE' => '%john%',
            'Article.name LIKE' => '%john%'
        )
    )
),
'order' => array(
    'Article.created' => 'DESC'
),
'fields' => array(),
'joins' => array(
    (int) 0 => array(
        'table' => 'data_texts',
        'alias' => 'DataText',
        'type' => 'INNER',
        'conditions' => array(
            (int) 0 => 'DataText.node_id = Article.id'
        )
    )
),
'contain' => array(
    'Slug' => array(
        'order' => array(
            (int) 0 => 'FIELD(Slug.language_id, "c141eafd-567a-4bc5-badd-c5a163c01f46") DESC'
        )
    ),
    'NodeType' => array(
        'ChildNodeType' => array()
    ),
    'DataLocation' => array(
        'conditions' => array()
    ),
    'DataMeta' => array(
        'conditions' => array()
    )
),
'group' => 'Article.id'

Paginate自称:

$nodes = $this->paginate($model);

1 个答案:

答案 0 :(得分:2)

find("count")中存在错误,如果查询仅导致1个组的记录,则返回错误计数。这已得到修复now。修复可能是在2.2.3版本之后完成的,所以现在只需使用github的master分支,修复程序将在下一个版本中提供。