0

私のページネーション設定は次のようになります。

        $this->Paginator->settings = array(
            'limit' => 100,
            'order' => 'Traffic.accessed DESC',
            'conditions' => array(
                'Traffic.webmaster_site_id' => $this->WebmasterSite->find('list', array(
                    'fields' => 'WebmasterSite.id',
                    'conditions' => array(
                        'WebmasterSite.user_id' => $this->Auth->user('id')
                    )
                ))
            ),
            'fields' => 'DATE(Traffic.accessed) AS `access_date`,
                        SUM(Traffic.webmaster_site_transfer) as total_webmaster_income,
                        COUNT(Traffic.webmaster_site_id) as total_webmaster_clicks',
            'group' => 'DATE(Traffic.accessed)',
            'paramType' => 'querystring'
        );

        $click_data = $this->Paginator->paginate('Traffic');

        $this->set('click_data', $click_data);

そして視野に

<th class="text-center">
    <?php if ($this->Paginator->sortKey() == 'Traffic.total_webmaster_clicks') {
        if ($this->Paginator->sortDir() == 'asc') {
            $sort_icon = '<i class="icon-sort-up"></i> ';
        } else {
            $sort_icon = '<i class="icon-sort-down"></i> ';
        }
    } else {
        $sort_icon = '<i class="icon-sort"></i> ';
    } ?>
    <?php echo $this->Paginator->sort('Traffic.total_webmaster_clicks',$sort_icon.__('Total Clicks'),array('escape'=>false)); ?>
</th>

したがって、Traffic.total_webmaster_clicksそれによってソートされません。AS total_webmaster_clicksこれは、ページネーション ステートメントに由来することに注意してください。

このような種類の (選択された AS) フィールドと GROUP BY で並べ替えを使用する方法がわかりません。さらに、DATETIME フィールドに GROUP BY があるため、virtualFields を作成できません。

ありがとう。

4

1 に答える 1

0

複雑なクエリの場合、デフォルトの並べ替えは機能しません。したがって、ビューを作成し、モデルと同じビューを使用する必要があります。並べ替えでページネーションが確実に得られます。ビューを使用することで、アプリケーションのパフォーマンスも向上します

于 2013-11-12T13:09:25.787 に答える