我正在使用包含行为,我希望能够一如既往地对数据进行排序,但我遇到了麻烦。
这可能是因为我要排序的列不是paginate表上的列,而是包含在包含的表上。
订阅表仅包含“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;
在这种情况下我如何使用分页?感谢。
答案 0 :(得分: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'); ?>