2

CakePHP で GROUP BY を使用する結果をページ分割すると、結果の数が正しくありません。これは、期待される (だった) ままの文書化された項目ですが、CakePHP book のこのページによると:

CakePHP 2.0 では、グループ句を使用するときに paginateCount() を実装する必要がなくなりました。コアの find('count') は、行の総数を正しくカウントします。

私は CakePHP 2.2.3 を使用していますが、まだ問題があります。私がする必要がある特定の何かがありますか?私は声明を誤解していますか?カスタムの paginate() や paginateCount メソッドを引き続き使用する必要がありますか?

「不正なカウント」の明確化: table1 と table2 を結合しています。つまり、「table1 アイテム」が 1 つしかない場合でも、2 つの行を取得します... 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 リリース後に行われたためmaster、今のところ github からのブランチを使用してください。修正は次のリリースで利用可能になります。

于 2012-10-29T14:48:13.240 に答える