0

ソート可能にしたい計算列があります。私はそれのためのgetメソッドを持っています...

public function getCur_margin() {
        return number_format(($this->store_cost / $this->store_price) / $this->store_cost * 100, 2) . '%';
    }

そして、私はこのスレッドをフォローしました...

CGridview カスタム フィールドの並べ替え可能

しかし今は、データベース内の実際の列を探しています。<calculations> AS cur_marginこの CActiveDataProvider を一時的にのみ使用してフィールドをフェッチするにはどうすればよいですか?

プロバイダーのコントローラー コードは次のとおりです。

$dataProvider = new CActiveDataProvider('Products', array(
    'criteria' => array(
        'condition' => 'store_id IN (SELECT `id` FROM `stores` WHERE `user_id` = ' . Yii::app()->user->id . ')',
    ),
    'pagination' => array(
        'pageSize' => 15,
    ),
    'sort'=>array(
        'attributes'=>array(
            'cur_margin' => array(
                'asc' => 'cur_margin ASC',
                'desc' => 'cur_margin DESC',
            ),
        ),
    ),
));
4

1 に答える 1

3

の選択プロパティでカスタム フィールドを指定しようとしましたCDbCriteriaか?

'select' => array(
    ...,   // fields to select
    '(<calculations>) AS cur_margin'
)

getCur_margin() メソッドを宣言する必要はありませんが$cur_margin、モデルで public メンバーを宣言するだけです。必要なすべての計算は、SQL クエリで実行されます。

このスレッドを例として参照することもできます。

于 2013-06-20T09:12:22.017 に答える