警予排序的自定义属性(yii sort by a custom attribute)

2019-09-27 08:29发布

在我的度假模式疫苗 I有这个功能

public function getVacCount(){

这个函数返回多少天有一个假期。

我想自定义列添加到这样的cgridview:

   <?php
    $this->widget('zii.widgets.grid.CGridView', array(
            ...
            array(
                'name' => 'count',
                'value' => '$data->getVacPeriod()'
            ),
            ...
        ),
    ));
    ?>

它工作正常。 但我不知道我怎么可以排序在这个自定义属性。 我试图用CSort,但它不工作。 任何想法?

Answer 1:

要使用CSort进行排序,你需要你的假期函数转换成SQL查询,然后藏匿导致公共变量模型。

CSort只能用SQL语句/函数的工作,因为它的下面是一个使用ORDER BY来完成所有的排序。

更多信息(和演示代码)可以在这里

下面是我如何做它在我的网站的样本:

$criteria->select = array(
        "*",
        new CDbExpression("IF(survey.RequestDate, survey.RequestDate, SurveyCompleteDate) AS SurveyDate")
    );

这就让我做这个类型的过滤器:

return new CActiveDataProvider($this, array(
    'criteria' => $criteria,
    'sort'=>array(
        'attributes'=>array(
            'SurveyDate' => array(
                'asc' => 'SurveyDate',
                'desc' => 'SurveyDate DESC',
            ),
            '*',
        ),
    ),
);

注意:您还需要在你的模型认为你正在做的CDbExpression的结果来定义公共变量。 矿被称为SurveyDate。



文章来源: yii sort by a custom attribute