同様の質問が寄せられていることは承知していますが、申し訳ありませんが、私の人生では何が間違っているのかわかりません。どんな助けでも大歓迎です。私がやりたいことは、データベースに合計 2 つの値を表示する CGridView に余分な列を追加することだけです。
これらは私が取ったステップです:
Database
User(forename, surname, part1, part2)
class User extends Controller:
protected function getTotal($data,$row,$dataColumn){
return $data->getAttribute('part1')+$data->getAttribute('part2');
}
public function actionIndex(){
$dataProvider=new CActiveDataProvider('User');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
class Stadium extends CActiveRecord:
public function rules(){
return array(
array('forename, surname', 'required'),
array('forename', 'surname', 'max'=>50),
array('part1, part2', 'numerical', 'integerOnly'=>true),
array('forename, surname, part1, part2, total', 'safe', 'on'=>'search'),
);
}
public function attributeLabels()
{
return array(
'forename' => 'forename',
'surname' => 'surname',
'part1' => 'part1',
'part2' => 'part2',
'total' => array(
'asc'=>'part1 + part2',
'desc'=>'part1 + part2 desc',
),
);
}
public function search(){
$criteria=new CDbCriteria;
$criteria->compare('forename',$this->forename,true);
$criteria->compare('surname',$this->surname,true);
$criteria->compare('part1',$this->part1);
$criteria->compare('part2',$this->part2);
$criteria->compare('total',$this->part1 + $this->part2,true);
$sort = new CSort();
$sort->attributes = array(
'total'=>array(
'asc'=>'part1 + part2 ASC',
'desc'=>'part1 + part2 DESC',
),
'*',
);
return new CActiveDataProvider(User', array(
'criteria'=>$criteria,
'sort'=>$sort,
));
}
}
view/User/index.php
<?php $this->widget('zii.widgets.grid.CGridView', array(
'itemsCssClass'=>'table table-hover',
'dataProvider'=>$dataProvider,
'template'=>"{items}",
'columns'=>array(
array('name'=>'forename', 'header'=>'Forename'),
array('name'=>'surname', 'header'=>'Surname'),
array('name'=>'total', 'header'=>'Total', 'value'=>array($this, 'getTotal')),
),
)); ?>
<?php $this->endWidget();?>
アドバイスありがとうございます。