/** * @param \Kdyby\Doctrine\QueryBuilder $qb * @return $this */ protected function applySelectFilters(QueryBuilder $qb) { if (count($this->selects) > 0) { $selects = []; foreach ($this->selects as $alias => $data) { $columns = array_unique($data['columns']); $distinct = $data['distinct'] ? 'DISTINCT ' : ''; if (empty($columns)) { $selects[] = $distinct . $alias; } else { $partial = []; foreach ($columns as $column => $columnAlias) { if (is_int($column)) { $partial[] = $columnAlias; } else { $selects[] = $distinct . $alias . '.' . $column . ' AS ' . $columnAlias; } } if (!empty($partial)) { if (!in_array('id', $partial)) { array_unshift($partial, 'id'); } $partial = implode(',', $partial); $selects[] = $distinct . 'PARTIAL ' . $alias . '.{' . $partial . '}' . ($data['alias'] !== null ? ' AS ' . $data['alias'] : ''); } } } $qb->select(implode(', ', $selects)); } foreach ($this->selectFilters as $modifier) { $modifier($qb); } return $this; }
/** * @param \Kdyby\Doctrine\QueryBuilder $qb * @return $this */ protected function applySelectFilters(QueryBuilder $qb) { if (count($this->selects) > 0) { $selects = $this->selects; $_selects = []; foreach ($selects as $alias => &$columns) { $columns = array_unique($columns); $columns = implode(',', $columns); $_selects[] = 'partial ' . $alias . '.{' . $columns . '}'; } $qb->select(implode(', ', $_selects)); } foreach ($this->selectFilters as $modifier) { $modifier($qb); } return $this; }