SUM-запрос в столбце CGridView - PullRequest
       4

SUM-запрос в столбце CGridView

1 голос
/ 22 февраля 2011

Я играю с виджетом CGridView и пытаюсь выяснить, будет ли уместным использовать его в следующем контексте: Допустим, у меня есть две таблицы базы данных, Car и Accident.Каждый автомобиль может быть связан с нулем или более несчастных случаев.Я хотел бы иметь столбец в виде сетки, содержащий количество аварий для каждого автомобиля, предполагая, что строка в виде сетки представляет автомобиль.Это возможно с помощью виджета GridView, или я должен попробовать другой подход?

Ответы [ 3 ]

2 голосов
/ 03 ноября 2012

Вы можете определить отношение для вашей модели автомобиля следующим образом:

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

Если вы используете счетчик ($ model-> случайности), тогда вы загрузите все связанные модели, а затем используйте функцию подсчета PHP, чтобы получить числоДля моделей, если вы заботитесь о производительности и памяти, вы будете использовать статистическое отношение crasCount для получения количества несчастных случаев.

1 голос
/ 02 марта 2011

Если у вас есть отношение «автомобили имеют один ко многим несчастным случаям», можно просто рассчитать отношение.$ модель это машина здесь.

<?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)',
            ),
),
));
0 голосов
/ 23 февраля 2011

Самый простой способ - получить модель автомобиля с помощью метода getNumberOfAccidents (). Затем вы можете использовать это в сетке как обычный столбец (numberOfAccidents). Легко, как пирог:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...