Grzegorz P.

Grzegorz P. CodeTwo sp. z o.o.
sp. k.

Temat: Pager i Criteria()

Witam!

Kolejna zagadka.


$c = new Criteria();
$c->addJoin(ListHasPassengerPeer::LINE_ID, LinePeer::ID, Criteria::JOIN);
$c->addGroupByColumn('fromm, too, date');


Tutaj chciałbym ostrzec przed nazywaniem kolumn w DB slowami: (from, to, date, list)



$pager = new sfPropelPager('Tabela', 5);
$pager->setCriteria($c);
$pager->setPeerMethod('doSelectJoinAll');
$pager->setPage($request->getParameter('page', 1));
$pager->init();
$this->pager = $pager;
$this->lps = $pager->getResults();


Problem polega na tym, dlaczego zapytanie zwracające ilość rekordów jest inne od tego pobierającego te rekordy? Dokładnie chodzi o to, że w pierwszym nie dodaje się klauzura GROUP BY.

Wie ktos jak to obejść?
Z góry bardzo dziękuję.
--
GP
Piotr Paryna

Piotr Paryna webdesigner

Temat: Pager i Criteria()

Próbowałeś dla pagera ustawić setCountMethod()?
Grzegorz P.

Grzegorz P. CodeTwo sp. z o.o.
sp. k.

Temat: Pager i Criteria()

Piotr Paryna:
Próbowałeś dla pagera ustawić setCountMethod()?

Tak, ustawiłem 'doCountJoinAll' i zmieniło ty zapytanie o tyle, że zlicza złączenia - to jest w porządku.

Jednak ciągle nie ma klauzuli 'GROUP BY'.Grzegorz P. edytował(a) ten post dnia 16.10.08 o godzinie 21:27
Piotr Paryna

Piotr Paryna webdesigner

Temat: Pager i Criteria()

Funkcja doCount() czyści kolumny do pobrania


$criteria->clearSelectColumns()->clearOrderByColumns();


Następnie dodaje kolumny z klauzuli addGroupByColumn()


foreach($criteria->getGroupByColumns() as $column)
{
$criteria->addSelectColumn($column);
}


Wnioskuję więc, że jeśli zamiast jednego wywołania addGroupByColumn() opartego o string, wywołasz 3 osobne oparte o stałe z klasy Peer to będzie śmigać.Piotr Paryna edytował(a) ten post dnia 15.10.08 o godzinie 15:18
Grzegorz P.

Grzegorz P. CodeTwo sp. z o.o.
sp. k.

Temat: Pager i Criteria()

Bardzo mi przykro, ale założenie w.w. jest błędne.
Otóż dodanie ograniczeń typu:


$c->addGroupByColumn(Class1Peer::KOL1);
$c->addGroupByColumn(Class1Peer::KOL2);


nic nie zmienia w zapytaniu zliczającym rekordy.Grzegorz P. edytował(a) ten post dnia 16.10.08 o godzinie 21:31
Grzegorz P.

Grzegorz P. CodeTwo sp. z o.o.
sp. k.

Temat: Pager i Criteria()

Dumałem, dumałem i wydumałem...

w klasie Peer obiektu dodać należy taką oto funkcję:


public static function getSpecialCount($c) {

$copy = clone $c; $copy->addGroupByColumn(self::LINE_ID); $copy->addGroupByColumn(self::DATE);
$copy->clearSelectColumns()->clearOrderByColumns(); $copy->addSelectColumn(self::LINE_ID);
$copy->addSelectColumn(self::DATE);
$rs = self::doSelectRS($copy);
$rs->setFetchmode(ResultSet::FETCHMODE_NUM);

return $rs->getRecordCount();
}


I potem w kontenerze


$pager->setPeerCountMethod('getSpecialCount');


Dziwne to troche i zamotane... ale działa.Grzegorz P. edytował(a) ten post dnia 16.10.08 o godzinie 23:37

Następna dyskusja:

test design specification &...




Wyślij zaproszenie do