/**
  * Add fields that are not mentioned in aggregate functions to GROUP BY.
  *
  * @param PreBuild $event
  */
 public function onPreBuild(PreBuild $event)
 {
     $config = $event->getConfig();
     $parameters = $event->getParameters();
     $gridName = $config->offsetGetByPath(self::PATH_NAME);
     if (!$this->isApplicable($gridName, $parameters)) {
         return;
     }
     $selects = $config->offsetGetByPath(self::PATH_SELECT, []);
     $groupBy = $config->offsetGetByPath(self::PATH_GROUPBY);
     $groupBy = $this->groupByHelper->getGroupByFields($groupBy, $selects);
     if ($groupBy) {
         $config->offsetSetByPath(self::PATH_GROUPBY, implode(',', $groupBy));
     }
 }
Exemple #2
0
 /**
  * @param array $value
  * @return array
  */
 protected function getGroupByFields(array $value)
 {
     $groupByHelper = new GroupByHelper();
     if (isset($value['groupBy'])) {
         $groupBy = $value['groupBy'];
     } else {
         $groupBy = [];
     }
     if (isset($value['select'])) {
         $select = $value['select'];
     } else {
         $select = [];
     }
     return $groupByHelper->getGroupByFields($groupBy, $select);
 }
 /**
  * @dataProvider groupByDataProvider
  * @param array  $selects
  * @param string $groupBy
  * @param array  $expected
  */
 public function testGetGroupByFields($selects, $groupBy, $expected)
 {
     $helper = new GroupByHelper();
     $this->assertEquals($expected, $helper->getGroupByFields($groupBy, $selects));
 }