2

在 CakePHP 中对使用 GROUP BY 的结果进行分页时,结果计数的数量不正确。这是一个记录在案的项目,正如(以前)所期望的那样,但根据CakePHP book 中的这个页面

在 CakePHP 2.0 中,使用组子句时不再需要实现 paginateCount()。核心 find('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'

)

分页调用本身:

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

1 回答 1

2

find("count")如果查询导致仅 1 个组的记录,则存在错误并返回不正确的计数。现在已解决此问题。修复可能是在 2.2.3 版本之后完成的,所以现在只需使用mastergithub 的分支,修复将在下一个版本中可用。

于 2012-10-29T14:48:13.240 回答