我有 2 个表:user(id,email,...) 和 task(id,uid,COMPLAINTS,..)
关系是
'tasks' => array(self::HAS_MANY, 'Task', 'uid'),
我在网格视图中显示所有用户,并希望添加一个列来显示属于该用户的任务的投诉列的总和。我能够通过用户模型中的这种 STAT 关系来实现这一点:
'complaints'=>array(self::STAT, 'Task', 'uid', 'select'=>'SUM(complaints)', 'defaultValue'=>'0'),
但是,当在网格视图中显示时,这将创建大量对数据库的查询。但它可以在单个查询中完成:
select user.*, sum(task.complaints)
from user
left join task
on user.id=task.uid
group by user.id
所以我想出了这个:
In the action method of the controller:
$criteria = new CDbCriteria;
$criteria->with = array('tasks'=>array('select'=>'sum(complaints) AS compl'));
$criteria->group = 't.id';
在查看日志时,我可以看到这会生成正确的查询,但是我无法访问总和的值。这是正确的做法吗?如果是,那么我如何访问这个新列?