CakePHP 2.4.4无法使用paginate(Paginator)按虚拟字段排序/排序

时间:2014-01-31 15:48:12

标签: sorting cakephp pagination virtual

我的虚拟场属性模型,在beforeFind()中生成,称为“距离”,可以工作。但是,我无法按它排序。我目前将此作为搜索表单的一部分:

echo $this->Form->input('sort', array(
    'options' => Hash::get($predefined, 'sort'), // List of options
));

它为URL添加了排序,它适用于所有普通字段,但不适用于虚拟字段距离。我应该以不同的方式实施吗?据我所知,虚拟字段应该与分页一起正常工作。

编辑:如果我实施了分页错误......

我设置了默认值:

public $paginate = array(
    'limit' => 25,
    'order' => array(
       'Properties.id' => 'asc'
    )
);

建立$条件后:

$this->Paginator->settings = $this->paginate;
$data = $this->Paginator->paginate('Property', $conditions);
$this->set('properties', $data);

以上工作可以很好地改变顺序,甚至可以直接在URL中编辑/排序:fieldname /,但不能使用虚拟字段'distance'。我也试过添加,但没有成功:

$this->paginate['order'] = array($value); //Value is the value for 'sort' named parameter

1 个答案:

答案 0 :(得分:2)

这部分信息:

  

我的虚拟字段属性模型,在beforeFind(),

中生成

似乎是个问题。

需要在调用Paginate()之前定义虚拟字段,以便分页器知道构建“排序”标准。

分页调用后,beforeFind()调用发生,因此您的虚拟字段尚未定义。在分页调用正上方移动虚拟字段的定义应解决此问题。