Exemple #1
0
 public function execute()
 {
     $qb = $this->getData();
     /*
      * Step 1) Apply needed columns
      */
     $selectColumns = [];
     foreach ($this->getColumns() as $column) {
         if ($column instanceof Column\Select) {
             $colString = $column->getSelectPart1();
             if ($column->getSelectPart2() != '') {
                 $colString .= '.' . $column->getSelectPart2();
             }
             $colString .= ' ' . $column->getUniqueId();
             $selectColumns[] = $colString;
         }
     }
     $qb->resetDQLPart('select');
     $qb->select($selectColumns);
     /*
      * Step 2) Apply sorting
      */
     if (count($this->getSortConditions()) > 0) {
         // Minimum one sort condition given -> so reset the default orderBy
         $qb->resetDQLPart('orderBy');
         foreach ($this->getSortConditions() as $key => $sortCondition) {
             /* @var $column \ZfcDatagrid\Column\AbstractColumn */
             $column = $sortCondition['column'];
             $colString = $column->getSelectPart1();
             if ($column->getSelectPart2() != '') {
                 $colString .= '.' . $column->getSelectPart2();
             }
             if ($column->getType() instanceof Type\Number) {
                 $qb->addSelect('ABS(' . $colString . ') sortColumn' . $key);
                 $qb->add('orderBy', new Expr\OrderBy('sortColumn' . $key, $sortCondition['sortDirection']), true);
             } else {
                 $qb->add('orderBy', new Expr\OrderBy($column->getUniqueId(), $sortCondition['sortDirection']), true);
             }
         }
     }
     /*
      * Step 3) Apply filters
      */
     $filterColumn = new Doctrine2\Filter($qb);
     foreach ($this->getFilters() as $filter) {
         /* @var $filter \ZfcDatagrid\Filter */
         if ($filter->isColumnFilter() === true) {
             $filterColumn->applyFilter($filter);
         }
     }
     /*
      * Step 4) Pagination
      */
     $this->setPaginatorAdapter(new PaginatorAdapter($qb));
 }
Exemple #2
0
 /**
  *
  * @param FilterDoctrine2 $filter
  *
  * @return \Doctrine\ORM\Query\Parameter[]
  */
 private function getParameters(FilterDoctrine2 $filter)
 {
     return $filter->getQueryBuilder()->getParameters();
 }