[ZF] Zend_Db_Select kolommen toevoegen/verwijderen
Ik wil een lijst tonen van records en wil deze pagineren via een klasse die het denkwerk doet. Deze klasse krijgt een db mee een een select waar hij zich mee moet redden. De lijst tonen en via ->limitPage() gaat het prima, maar ik wil ook het totaal aantal records achterhalen, maar ik wil natuurlijk niet alle data fetchen.
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?
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?
Gesponsorde koppelingen:
Ik kan er geen kaas van maken...
Wat is nu het probleem? Je kunt toch wel een query uitvoeren?
Wat is nu het probleem? Je kunt toch wel een query uitvoeren?
Ik zal dan nog een poging doen het geheel wat op te helderen.
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;
}
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;
}



