1

私の休暇モデルVacにはこの機能があります

public function getVacCount(){

この関数は、1回の休暇に何日あるかを返します。

そして、次のようにcgridviewにカスタム列を追加したいと思います。

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

それはうまくいきます。しかし、このカスタム属性をどのように並べ替えることができるかわかりません。CSortを使おうとしましたが、動作しません。何か案が?

4

1 に答える 1

5

並べ替えに CSort を使用するには、vacation 関数を SQL クエリに変換し、その結果をモデルのパブリック変数に格納する必要があります。

CSort は、その下ですべての並べ替えを行うために ORDER BY を使用しているため、SQL ステートメント/関数でのみ機能します。

詳細情報 (およびデモ コード)はこちらから入手できます

これは、私のサイトでどのように行っているかのサンプルです。

$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 に答える