Cakephp分页随机顺序?

时间:2012-01-11 22:22:13

标签: cakephp pagination cakephp-2.0 sorting cakephp-appmodel

好的,我看了看,但似乎无处可寻。我有一个精美分页的结果显示,但它们目前按升序显示。我希望他们以随机顺序显示。这是我当前的控制器代码:

public function condos() {          

$this->paginate['Unit']=array(
        'limit'=>9,
        'contain'=>array(
                'User'=>array(
                    'id', 'user_name', 'area_code', 'exchange', 'sln', 'email'),
                'Complex'=>array('id','complex_name', 'realname', 'photo1','photo2','photo3','photo4','photo5', 'complex_website')
                    ),
        'conditions'=>array(
                'Unit.type'=>array('condo', 'rentalco'),
                'Unit.active'=>1)   
    );
$data = $this->paginate('Unit');
$this->set('allcondos', $data);


}

2 个答案:

答案 0 :(得分:6)

对于其他找到此问题的人 - 实际答案是生成种子(0到1之间的浮点数),并在需要RAND()排序之前将其保存到会话中(在控制器中) beforeFilter())。然后:

$this->paginate['order'] = sprintf('RAND(%f), $this->Session->read('seed'));

这会在对分页器的调用之间保留RAND()种子,并保留请求之间结果的整体顺序。

答案 1 :(得分:0)

对我来说,这似乎在CakePHP 2上运作得很好:

$this->paginate = array(
    'order' => 'RAND()'
);

这是使用MySQL RAND()函数,Cake将其传递给数据库。

编辑:现在我考虑一下,这不是一个好主意,因为页面之间没有维护订单。我无法想到一个很好的方法来随机化订单并保持页面之间的连续性。也许如果你要用JavaScript洗牌页面上的项目?

相关问题