Versio

[ZF] Zend_Db_Select kolommen toevoegen/verwijderen

Overzicht Reageren

Storeman storeman

storeman storeman

03/04/2008 21:08:00
Quote Anchor link
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?
 
PHP hulp

PHP hulp

25/05/2012 20:03:15
Gesponsorde koppelingen:
 
Frank -

Frank -

03/04/2008 21:23:00
Quote Anchor link
Ik kan er geen kaas van maken...

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT COUNT(kaas) AS aantal_kazen FROM boerderij


Wat is nu het probleem? Je kunt toch wel een query uitvoeren?
 
Storeman storeman

storeman storeman

03/04/2008 21:33:00
Quote Anchor link
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;
}
 



Overzicht Reageren

Get Adobe Flash player