【发布时间】:2023-03-10 11:32:02
【问题描述】:
我在 beforeFind() 中生成的属性模型的虚拟字段,称为“距离”,有效。但是,我无法对其进行排序。我目前将此作为搜索表单的一部分:
echo $this->Form->input('sort', array(
'options' => Hash::get($predefined, 'sort'), // List of options
));
这将排序添加到 URL,它适用于所有普通字段,但不适用于虚拟字段距离。我应该以不同的方式实施吗?据我所知,Virtual Fields 应该可以很好地处理分页。
编辑:如果我实现了错误的分页...
我已经设置了默认值:
public $paginate = array(
'limit' => 25,
'order' => array(
'Properties.id' => 'asc'
)
);
构建 $conditions 后:
$this->Paginator->settings = $this->paginate;
$data = $this->Paginator->paginate('Property', $conditions);
$this->set('properties', $data);
即使通过直接编辑 URL 中的 /sort:fieldname/ ,上述方法也可以很好地更改顺序,但不能使用虚拟字段“距离”。我也尝试添加,但没有成功:
$this->paginate['order'] = array($value); //Value is the value for 'sort' named parameter
【问题讨论】:
-
“由于虚拟字段在查找时的行为与常规字段非常相似,因此 Controller::paginate() 也将能够按虚拟字段排序。” book.cakephp.org/2.0/en/models/…
-
这正是我的观点。
-
尝试使用第三个参数(白名单)进行分页(api.cakephp.org/2.4/…)。如果它不会帮助放置更多代码(beforeFilter 方法和更多控制器方法)。
-
这与问题无关,但很有用,谢谢,我从现在开始实施
标签: sorting cakephp pagination virtual