Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] Problem z zapytaniem SQL w Propelu
Forum PHP.pl > Forum > PHP > Frameworki
parzol
Witam.

Oto kod z RoomPeer.php:
  1. <?php
  2. public static function sraka() {
  3. $conn = Propel::getConnection();
  4.  
  5. $sql = "SELECT r.id AS room_id, r.name AS room_name, p.id AS property_id, p.name AS
     property_name, c.name AS city, region.name AS region, p.standard, rg.file, MIN(rp.price) AS min_price, GROUP_CONCAT(DISTINCT CONCAT(a.name, '*', a.icon) ORDER BY a.name SEPARATOR '|') AS attractions FROM room r LEFT JOIN property p ON r.property_id=p.id LEFT
     JOIN room_gallery rg ON rg.room_id=r.id LEFT JOIN room_price rp ON rp.room_id=r.
    id LEFT JOIN region ON p.region_id=region.id LEFT JOIN city c ON p.city_id=c.id L
    EFT JOIN property_attraction pa ON p.id=pa.property_id LEFT OUTER JOIN attraction
     a ON pa.attraction_id=a.id AND (a.is_active=1 OR a.is_active IS NULL) GROUP BY room_id;"
    ;
  6.  
  7. $statement = $conn->prepareStatement($sql);
  8. $rs = $statement->executeQuery($sql, ResultSet::FETCHMODE_NUM);
  9. $a = self::populateObjects($rs);
  10.  
  11. $search_array = array();
  12.  
  13. foreach($a as $row) {
  14. array_push($search_array, $row);
  15. }
  16.  
  17. echo '<pre>';
  18. print($search_array);
  19. die();
  20. ?>


A oto kod z kontrolera:
  1. <?php
  2. $pager = new sfPropelPager('Room', 2);
  3. $pager->setPeerMethod('sraka');
  4. $pager->setPage($this->getRequestParameter('page', 1));
  5. $pager->init();
  6. $this->pager = $pager;
  7. ?>


Samo zapytanie napewno jest dobre bo sprawdzałem w MySQLu. Jednak zmienna $search_array jest pusta. print_r($a) też nic nie daje. sciana.gif Czy ktoś wie co robie źle? Ewentualnie jak inaczej do sfPropelPager`a włożyć takie zapytanie?

Dzięki z góry za wszelka pomoc.
LukasKK
Nie wiem czy w taki sposób jak napisales ta pentle dostaniesz dane poczytaj tutaj http://propel.phpdb.org/trac/wiki/Users/Do...2/Relationships
mike
Cytat(parzol @ 15.02.2008, 01:04:35 ) *
Ewentualnie jak inaczej do sfPropelPager`a włożyć takie zapytanie?
Przecież klasa sfPropelPager posiada funkcję setCriteria(Criteria $c). Stwórz odpowiedni obiekt i przekaż go przed zainicjowaniem sfPagera.
destroyerr
@mike, wydaje mi się, że nie zrozumiałeś problemu. No chyba, że chcesz takie zapytanie, przy "pomocy" Criteria wykonać.

@parzol: nie wiem czy dobrze robisz, że wywołujesz metode prepareStatement. Wywołuje się ją wtedy kiedy chcesz do zapytania dodać jakieś parametry. Ty ich nie dodajesz, więc spróbuj zamiast tego dać $conn->createStatement();
parzol
Hmmm. Dzięki za odpowiedzi tylko że sam kod u góry działa. Wyświetla mi dokładnie to co chciałem. Ale pragne teraz podczepić to pod tego pagera. I tu jest problem! W nim tak jakby nic nie widzi. A na Criteria nie mam co liczyć bo nie zbuduje takiego zapytania poprzez Criteria.

Problelem może być tutaj ewentualnie:
  1. <?php
  2. $a = self::populateObjects($rs);
  3. ?>


Tego wcześniej nie stosowałem. I nie wiem do końca czy dobrze to używam. Ta linijka powinna zwracać już jakieś rezultaty zapytania a jest pusta. sadsmiley02.gif
mike
Cytat(destroyerr @ 15.02.2008, 11:08:15 ) *
@mike, wydaje mi się, że nie zrozumiałeś problemu. No chyba, że chcesz takie zapytanie, przy "pomocy" Criteria wykonać.
Tak, myślałem o zbudowaniu tego zapytania na Criteria smile.gif
phpion
Wiem, że ręczne dodanie $c->addSelectColumn('GROUP_CONCAT(...)') powodowało błąd nieznanej kolumny. A gdybyś spróbował dodać do klasy RoomPeer nową stałą:
  1. <?php
  2. const GROUP_CONCAT = 'GROUP_CONCAT(...)';
  3. ?>

a następnie w Criteria dodał:
  1. <?php
  2. $c->addSelectColumn(RoomPeer::GROUP_CONCAT)
  3. ?>

dodatkowo nadając jej alias (nie pamiętam teraz metody*) możliwe, że by zadziałało. Nie wiem, nie testowałem tego nigdy, ale myślę, że warto spróbować.

* addAlias() winksmiley.jpg
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.