Dear Friend
This is just to simulate your scenario.
I got a table wage.
Model:Wage.
Attributes:id,name,days,hours.
virtual attributes:duration,salary.
public function search()
{
$criteria=new CDbCriteria;
$criteria->select="t.*,SUM(t.days*t.hours) AS duration,SUM(t.days*t.hours*75) AS salary";
$criteria->group="t.id";
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->compare('days',$this->days);
$criteria->compare('hours',$this->hours);
$criteria->compare('t.days*t.hours',$this->duration);
$criteria->compare('t.days*t.hours*75',$this->salary);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array("attributes"=>array("duration"=>array(),"salary"=>array())),
));
}
admin.php
<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'wage-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'id',
'name',
'days',
'hours',
'duration',
'salary',
array(
'class'=>'CButtonColumn',
),
),
)); ?>
This is working well.
In the above scenario we used GROUP BY.
In my case ,there is no need for it as we are dealing with single table.
The following is also working.
public function search()
{
// Warning: Please modify the following code to remove attributes that
// should not be searched.
$criteria=new CDbCriteria;
$criteria->select="t.*,t.days*t.hours AS duration,t.days*t.hours*75 AS salary";
//$criteria->group="t.id";//without GROUP BY
$criteria->compare('id',$this->id);
$criteria->compare('name',$this->name,true);
$criteria->compare('days',$this->days);
$criteria->compare('hours',$this->hours);
$criteria->compare('t.days*t.hours',$this->duration);
$criteria->compare('t.days*t.hours*75',$this->salary);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
'sort'=>array("attributes"=>array("duration"=>array(),"salary"=>array())),
));
}
I perceive that the situation here does not need GROUP BY.