Ejemplo n.º 1
0
 /**
  * @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;
 }
Ejemplo n.º 2
0
 /**
  * @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;
 }