Example #1
0
 public function testBasic()
 {
     $this->assertInstanceOf('Zend\\Db\\Sql\\Select', $this->filterSelect->getSelect());
     $this->assertInstanceOf('Zend\\Db\\Sql\\Sql', $this->filterSelect->getSql());
     // Test two filters
     $filter = new \ZfcDatagrid\Filter();
     $filter->setFromColumn($this->column, '~myValue,123');
     $filter2 = new \ZfcDatagrid\Filter();
     $filter2->setFromColumn($this->column2, '~myValue,123');
     $filterSelect = clone $this->filterSelect;
     $filterSelect->applyFilter($filter);
     $filterSelect->applyFilter($filter2);
     $select = $filterSelect->getSelect();
     /* @var $where \Zend\Db\Sql\Where */
     $where = $select->getRawState('where');
     $predicates = $where->getPredicates();
     $this->assertEquals(2, count($predicates));
 }
Example #2
0
 /**
  *
  * @throws \Exception
  */
 public function execute()
 {
     if ($this->getAdapter() === null || !$this->getAdapter() instanceof \Zend\Db\Sql\Sql) {
         throw new \Exception('Object "Zend\\Db\\Sql\\Sql" is missing, please call setAdapter() first!');
     }
     $platform = $this->getAdapter()->getAdapter()->getPlatform();
     $select = $this->getData();
     /*
      * Step 1) Apply needed columns
      */
     $selectColumns = [];
     foreach ($this->getColumns() as $col) {
         if (!$col instanceof Column\Select) {
             continue;
         }
         $colString = $col->getSelectPart1();
         if ($col->getSelectPart2() != '') {
             $colString = new Expression($platform->quoteIdentifier($colString) . $platform->getIdentifierSeparator() . $platform->quoteIdentifier($col->getSelectPart2()));
         }
         $selectColumns[$col->getUniqueId()] = $colString;
     }
     $select->columns($selectColumns, false);
     $joins = $select->getRawState('joins');
     $select->reset('joins');
     foreach ($joins as $join) {
         $select->join($join['name'], $join['on'], [], $join['type']);
     }
     /*
      * Step 2) Apply sorting
      */
     if (!empty($this->getSortConditions())) {
         // Minimum one sort condition given -> so reset the default orderBy
         $select->reset(Sql\Select::ORDER);
         foreach ($this->getSortConditions() as $sortCondition) {
             /** @var \ZfcDataGrid\Column\AbstractColumn $col */
             $col = $sortCondition['column'];
             $select->order($col->getUniqueId() . ' ' . $sortCondition['sortDirection']);
         }
     }
     /*
      * Step 3) Apply filters
      */
     $filterColumn = new ZendSelect\Filter($this->getAdapter(), $select);
     foreach ($this->getFilters() as $filter) {
         /* @var $filter \ZfcDatagrid\Filter */
         if ($filter->isColumnFilter() === true) {
             $filterColumn->applyFilter($filter);
         }
     }
     /*
      * Step 4) Pagination
      */
     $this->setPaginatorAdapter(new PaginatorAdapter($select, $this->getAdapter()));
 }