0

私は包含動作を使用しており、いつものようにデータをソートできるようにしたいのですが、問題があります。

並べ替えたい列が、ページ付けされたテーブルの列ではなく、含まれているテーブルの列である可能性があります。

サブスクリプションテーブルには、「user_id」と「post_id」のみが含まれます。

コントローラーで私は持っています:

$this->paginate = array(
    'conditions' => array('Subscription.user_id' => $this->Session->read('Auth.User.id')),
    'paramType' => 'querystring',
    'limit' => 20,
    'contain'=> array('User', 'Post' => array('Priority', 'Status')) 
 );

$this->set('subscriptions', $this->paginate('Subscription'));

そして私の見解では、これは:

<!-- example of not working sort -->
<th class="td_subject"><?php echo $this->Paginator->sort('subject'); ?></th>

たとえば、サブジェクトのデータは、配列$subscriptionに通常の形式で含まれています。

$subscription['Post']['subject']

そして、私はそれをこのように印刷します:

foreach ($subscriptions as $subscription): 
    echo ...
    echo '<td>'.h($subscription['Post']['subject'].'</td>';
    echo ...
endforeach;

この場合、どのようにページネーションを使用できますか? ありがとう。

4

1 に答える 1

2

この場合、contain を使用しないでください。テーブルを手動で結合します。

$this->paginate = array(
    'conditions' => array('Subscription.user_id' => $this->Session->read('Auth.User.id')),
    'paramType' => 'querystring',
    'limit' => 20,
    'joins'=>array(
        array(
            'table'=>'users',
            'alias'=>'User',
            'conditions'=>array(
                'Subscription.user_id = User.id
            )
        ),
        array(
            'table'=>'posts',
            ...
        ),
        array(
             'table'=>'priorities',
             ...
        ),
        array(
             'table'=>'status',
             ...
        )
    )
 );

あなたの見解:

<?php echo $this->Paginator->sort('Post.subject', 'Subject'); ?>
于 2012-10-24T16:17:26.383 に答える