Archiwum

Posty oznaczone ‘criteria’

Symfony: Paginacja przy własnych/nietypowych warunkach SQL

Styczeń 5th, 2009 zergu Brak komentarzy

Pobieranie obiektów bez wykorzystywania obiektu klasy Criteria jest dość proste. Jednak standardowy paginator w Symfony ma taką właściwość, że jako parametr przyjmuje obiekt tejże klasy. Stwarza to trochę problemów, gdy odpytujemy bazę w niezbyt typowy sposób, a chcemy podzielić wyniki na strony. Przykład: w wyszukiwarce sprawdzamy czy połączone kolumny pasują do podanej frazy.

Prawdę mówiąc nie wiem jak to zrobić w Propelu 1.2 (tym samym Symfony < 1.2), jednak w wersji 1.3 jest już na to sposób dzięki Criteria::CUSTOM. Przykładowo:


$c = new Criteria();
$c->add (CarPeer::BRAND,
         CarPeer::BRAND."||' '||".CarPeer::MODEL.' ILIKE \'%'.$phrase.'%\'',
         Criteria::CUSTOM);
…
$pager->setCriteria ($c);

Rzeczą, na którą koniecznie trzeba zwrócić uwagę, jest podanie dowolnej kolumny (pierwszy parametr), mimo że nie będzie ona wykorzystywana. Jako drugi parametr podajemy już dokładnie to co ciężko było normalnie zbudować wykorzystując propelowe kryteria (może to być fragment czystego SQL występującego po klauzuli WHERE). Ostatni parametr jest narzucony i służy do aktywowania całej magii.

Kategorie:Symfony Tagi:, ,