Ala*_*med 1 sorting yii virtual-attribute
在我的假期模型Vac 中,我有这个功能
public function getVacCount(){
Run Code Online (Sandbox Code Playgroud)
此函数返回一个假期有多少天。
我想向 cgridview 添加一个自定义列,如下所示:
<?php
$this->widget('zii.widgets.grid.CGridView', array(
...
array(
'name' => 'count',
'value' => '$data->getVacPeriod()'
),
...
),
));
?>
Run Code Online (Sandbox Code Playgroud)
它工作正常。但我不知道如何对这个自定义属性进行排序。我尝试使用 CSort 但它不起作用。任何的想法?
要使用 CSort 进行排序,您需要将假期函数转换为 SQL 查询,然后将结果存储在模型的公共变量中。
CSort 仅适用于 SQL 语句/函数,因为它在底层使用 ORDER BY 进行所有排序。
此处提供更多信息(和演示代码)
这是我如何在我的网站上执行此操作的示例:
$criteria->select = array(
"*",
new CDbExpression("IF(survey.RequestDate, survey.RequestDate, SurveyCompleteDate) AS SurveyDate")
);
Run Code Online (Sandbox Code Playgroud)
这然后允许我做这种类型的过滤器:
return new CActiveDataProvider($this, array(
'criteria' => $criteria,
'sort'=>array(
'attributes'=>array(
'SurveyDate' => array(
'asc' => 'SurveyDate',
'desc' => 'SurveyDate DESC',
),
'*',
),
),
);
Run Code Online (Sandbox Code Playgroud)
注意:您还需要在模型中定义一个公共变量来保存您正在执行的 CDbExpression 的结果。我的叫做SurveyDate。
归档时间: |
|
查看次数: |
5245 次 |
最近记录: |