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)); }
/** * * @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())); }