在CGridView列中进行SUM查询

时间:2011-02-22 15:20:01

标签: yii

我正在玩CGridView小部件,我试图找出在以下环境中使用它是否合适: 假设我有两个数据库表,Car and Accident。每辆车可能与零次或多次事故有关。我想在网格视图中有一列包含每辆车的事故数,假设网格视图中的一行代表一辆汽车。 这是可行的使用GridView小部件,还是我应该尝试其他方法?

3 个答案:

答案 0 :(得分:2)

您可以按如下方式为Car模型定义关系:

public function relations()
{
   return array(
      'accidents' => array(self::HAS_MANY, 'Accidents', 'Id'),
      'accidentsCount' => array(self::STAT, 'Accidents', 'AccidentId'),
   );
}

如果您使用count($ model->意外),那么您将加载所有相关模型,然后使用PHP计数功能获取模型数量,如果您关心性能和内存,您将使用stat relation accidentCount来获取数字事故。

答案 1 :(得分:1)

如果你有“汽车有一到多次事故”的关系,可以使用关系的简单计数。 $ model在这里开车。

<?php $this->widget('zii.widgets.grid.CGridView', array(
    'id'=>'car-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        'name',
        array(
                'header'=>'Accidents',
                'value'=>'count($data->accidents)',
            ),
),
));

答案 2 :(得分:0)

最简单的方法是给汽车模型一个“getNumberOfAccidents()”getter。然后,您可以在网格中将其用作常规列(numberOfAccidents)。很容易馅饼:))