2012-10-24 34 views
0

我正在使用包含行爲,我希望能夠像往常一樣排序數據,但我有麻煩。Paginator->使用包含在CakePHP 2.2排序

這可能是因爲我想排序的列不是分頁表上的列,而是包含表。

訂閱表只包含「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['Post']['subject'] 

而我用這種方式打印它:

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

如何在這種情況下使用分頁?謝謝。

回答

2

不要使用包含在這種情況下,手動加入的表:

$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'); ?> 
+0

我不明白它的工作。訂閱與Post和User模型有關。 如果我將它們添加到連接上,它會顯示:「不是唯一的表/別名:'用戶'」。所以,如果我刪除它們,並且只是使用Post添加相關表格,例如優先級和狀態,那麼它會說:未知列'Post.priority_id'引用連接條件。 – Alvaro