[ZF] Zend_Db_Select kolommen toevoegen/verwijderen
Nu is het niet mogelijk een kolommen toe te voegen, omdat er dan een innerjoin wordt toegevoegd (via select->from(table, array_cols)).
De kolommen kunnen wel gereset worden via select->reset( 'column' ), maar ik kan vervolgens geen velden toevoegen. Ik zou graag het totaal aantal record ophalen via COUNT().
Suggesties?
Wat is nu het probleem? Je kunt toch wel een query uitvoeren?
Ik wil dus inhaken op de Zend_Db en consorten. Er wordt iets dergelijks opgeroepen:
$myList = Storeman_List_db($listname, $dbAdapter, $zendDbSelect, $arrOptions);
echo $myList->render();
De lijst renderen gaat prima, maar ik wil nu het totaal aantal rijen verkrijgen wat binnen de $zendDbSelect valt (bijvoorbeeld door een filter op gebruikersid).
Ik heb geen veld informatie nodig, ook een sort boeit me niet, dus deze reset ik:
// Creeer een clone, zodat het origeel blijft bestaan
$allrowselect = clone $this->_select;
$allrowselect->reset(Zend_Db_Select::ORDER );
$allrowselect->reset(Zend_Db_Select::COLUMNS );
Het $allrowselect object poept nu de volgende query uit:
SELECT table.* FROM table
Het moge duidelijk zijn dat ik dit niet wil ivm performance.
Dus wil ik iets als
$allrowselect->from('table', array('num'=>'COUNT(*)'));
echter wil ik niet weten welke table of joins er zijn in het select object, dat weet dat object, dus daar wil ik niets mee te maken hebben, eigenlijk wil ik zoiets doen:
$allrowselect->column( new Zend_Db_Expr('COUNT(*)'));
Ik heb deze methode er zelf ingehackt, niet erg netjes, daarnaast werkt het niet.
Warning: Select query cannot join with another table in E:\www5\v2\mijntioganl\library\Zend\Db\Table\Select.php on line 191
Deze functie heb ik in het select object geramt:
public function column( $cols){
$this->_tableCols(NULL, $cols);
return $this;
}