1

属性 (id、name、price、discount) のリストと、属性ではない (total_price) 列を表示したいと考えています。

このコードを使用すると、データのテーブルが表示されますが、列 (total_price) で検索またはソートできません

誰でも私を助けることができますか?

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'product-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
    'id',
    'name',
    array(
            'header' =>'Price',
            'name'=>'price',
            'value'=>'$data->price',
    ),
    array(
            'header' =>'Discount',
            'name'=>'discount',
            'value'=>'$data->discount',
    ),
    array(
            'header' =>'total price',// total price doesn't save in Data Base
            'name'=>'total_price',
            'value'=>'total_price - (total_price * $data->discount/100)',
    ),
    array(
        'class'=>'CButtonColumn',
    ),
),

));
?>

4

1 に答える 1

0

これを $model->search() メソッドに置くことができます:

$criteria=new CDbCriteria;

$criteria->select = "t.*, t.price - (t.price * t.discount/100) as total_price";

// EDITED: Added for Sort:
$sort = new CSort();
$sort->attributes = array(
                        'defaultOrder'=>'name ASC',
                        'total_price'=>array(
                            'asc'=>'total_price ASC',
                            'desc'=>'total_price DESC',
                          ),
                          '*', // Add order in the other fields.
                    );

return new CActiveDataProvider($this, array(
        'criteria'=>$criteria,
        'sort'=>$sort, // Added to sort.
);

そして、「製品」モデル クラスに非永続属性を作成します。

public $total_price;

最後に、('safe', 'on'=>'search') の配列で rules() に 'total_price' を配置します。次のようになります。

array('id, name, price, discount, total_price', 'safe', 'on'=>'search'),
于 2013-08-05T10:24:01.490 に答える