Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] Problem z zapytaniem SQL w Propelu
parzol
post 15.02.2008, 01:04:35
Post #1





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 7.05.2005

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
LukasKK
post 15.02.2008, 08:21:43
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 0
Dołączył: 20.02.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
mike
post 15.02.2008, 09:39:55
Post #3





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
destroyerr
post 15.02.2008, 11:08:15
Post #4





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


@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();
Go to the top of the page
+Quote Post
parzol
post 15.02.2008, 11:25:05
Post #5





Grupa: Zarejestrowani
Postów: 135
Pomógł: 1
Dołączył: 7.05.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
mike
post 15.02.2008, 11:34:38
Post #6





Grupa: Przyjaciele php.pl
Postów: 7 494
Pomógł: 302
Dołączył: 31.03.2004

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
phpion
post 15.02.2008, 11:59:20
Post #7





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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

Ten post edytował phpion 15.02.2008, 12:01:09
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 15.06.2025 - 16:05