2009
10
feb

Zend_Paginator bug


A minap komolyan meggyűlt a bajom a Zend_Paginator komponenssel. Egy HAVING utasítással egészítettem ki a Zend_Db_Select-et melyet a paginatornak akartam adni paraméterként, de állandóan arra panaszkodott, hogy ismeretlen oszlopra hivatkozok a having kifejezésben:

SQLSTATE[42S22]: Column not found: 1054 Unknown column ‘c’ in ‘having clause’ 

Lefuttattam a query-t közvetlenül MySQL-ben, de ott nem volt tapasztalható a hiba, így a Zend Framework kódját és a fórumokat kezdtem el bújni, majd rövidesen rá is bukkantam a megoldásra: [Zend_Paginator] Bug when using complex Zend_Db_Select. A rendellenesség a Zend_Paginator_Adapter_DbSelect setRowCount() függvényében keresendő, mivel ez a függvény már “lebutítva” kapja meg a lekérdezést, amely ekkor már csak egy oszlopot tartalmazhat. Ha nem így történik akkor kivételre fut. Megértve, hogy pontosan mi okozza a hibát elég volt annyit alakítani a kódon, hogy a paginatornak nem az eredeti lekérdezést adtam át, hanem egy butítottat:

// $select1-ben van a komplex lekérdezés
$select2 = $company->select()->setIntegrityCheck(false);
$select2->from($select1, array('COUNT(*)'));
$paginator = new Zend_Paginator(new Zend_Paginator_Adapter_DbSelect($select2));

Álljon hát itt ez a bejegyzés, hogy máskor könnyen visszakereshető legyen a megoldás!

Címkék: , , , , ,

Szólj hozzá te is!