好的,我看了看,但似乎无处可寻。我有一个精美分页的结果显示,但它们目前按升序显示。我希望他们以随机顺序显示。这是我当前的控制器代码:
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);
}
答案 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洗牌页面上的项目?