1

在我的假期模型Vac中,我有这个功能

public function getVacCount(){

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

我想像这样向 cgridview 添加一个自定义列:

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

它工作正常。但我不知道如何对这个自定义属性进行排序。我尝试使用 CSort 但它不起作用。任何的想法?

4

1 回答 1

5

要使用 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。

于 2012-06-05T04:41:09.580 回答