Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Jak wykonać poniższe zapytanie używając Zend_Db_Table
Forum PHP.pl > Forum > PHP > Frameworki
El.Kurczako
Jak w temacie. Ale jest jeden warunek - chodzi o użycie Zend_Db_Table, adapter dla tej klasy mam w bootstrapie.

Zapytanie następujące:
  1. SELECT u.u_imie AS imie, u.u_nazwisko AS nazwisko, z.z_data AS DATA
  2. FROM uzytkownicy u, zamowienia z
  3. WHERE z.id_uzytkownika = u.id
  4. ORDER BY z.DATA DESC


Bardzo proszę o rozwiązanie.
Sabistik
Tu musisz sobie zrobić jakąś własną metodę i za pomocą Zend_Db_Select odpowiednio sformułować a następnie zwrócić dane w odpowiedniej dla siebie formie.
El.Kurczako
Witam

Hmm... próbowałem... i nie wiem dlaczego nie działa, może robię nieodpowiednio. Czy może ktoś coś zaproponować?
Sabistik
No to pokaż kod który 'probowałeś'.
El.Kurczako
Dziedziczę po Abstract, zmieniłem teraz, ale to akurat nie ma wpływu.
  1. <?php
  2. class Uzytkownicy extends Zend_Db_Table_Abstract {
  3.  protected $_name = 'uzytkownicy';
  4.  
  5.  public function pokazUzytkownikow() {
  6. $select = $this->select()->from(array('z' => 'zamowienia', 'u' => 'uzytkownicy'), array('u.u_imie as imie', 'u.u_nazwisko as nazwisko', 'z.z_data as data'))
  7. ->where('z.id_uzytkownika = u.id')
  8. ->order('z.data DESC'));
  9. return $this->fetchAll($select);
  10.  }
  11. }
  12. ?>


Raz jeszcze wzór oryginalnego zapytania:
  1. SELECT u.u_imie AS imie, u.u_nazwisko AS nazwisko, z.z_data AS DATA
  2. FROM uzytkownicy u, zamowienia z
  3. WHERE z.id_uzytkownika = u.id
  4. ORDER BY z.DATA DESC


I jeszcze jedno pytanie, czy kolejne warunki WHERE (normalnie dodane przez AND ... np. AND u.nazwisko = "Nowak") dodaje się poprzez ->where()->where->()... czy jakoś inaczej?

UPDATE: jeżeli jest jakiś inny sposób, nie poprzez Zend_Db_Table, to ... chętnie wysłucham. Pytałem o ten konkretny, gdyż ... tak widziałem w jednym z tutoriali i tak zacząłem korzystać.
Sabistik
A to zapytanie jest w ogóle poprawne? Nie powinno być przez JOINa jakiegoś? tongue.gif

Co do where() to tak jak napisałeś.
El.Kurczako
Samo zapytanie jest poprawne, sprawdzałem w phpMyAdmin (zresztą jest ono super proste smile.gif ) i wyświetla mi wszystkich użytkowników, którzy wykonali zamówienie, porządkując wg daty, malejąco. Fakt, powinno być GROUP, żeby się nie powtarzali, ale to jest akurat najmniejszy problem. Samo zapytanie jest dla mnie mniej ważne, najważniejsza jest konstrukcja tego typu zapytania (z uwzględnieniem wielu tabel) w ZF i ... stąd ten temat winksmiley.jpg A zapytanie wymyśliłem na poczekaniu (stworzyłem sobie tymczasowe tabele), gdyż będę tego typu zapytania stosował praktycznie ciągle, a chciałem opisać problem na przykładzie.

Tak jak pisałem, może ktoś ma inne rozwiązanie. Np. utworzenie zmiennej w bootstrapie (Zend_Db::factory) i przekazanie jej do obiektów klas modeli... obojętnie. Jeżeli inaczej (albo podobnie) powinno się to rozwiązać, to proszę o pomoc.
kosmowariat
zawsze w metodzie możesz dać $this->_db->query($sql) ;-)
LBO
Jeżeli zapytanie - w sensie SQL - działa, to pokaż na forum, co sklecił ten select.
El.Kurczako
Sklecił błąd 'Query is empty'.

kosmowariat: czytając manual pisze, że wszystkie zapytania w ZF są najpierw przygotowywane a potem wykonywane, ale czy w tym przypadku także? http://framework.zend.com/manual/en/zend.db.html Punkt 10.1.9. Jeżeli wklepie całe zapytanie z ręki podając dla przekazywanych zmiennych (jeżeli będą) od razu wartości? Czy można to jakoś przygotować najpierw a potem odpalić?

UPDATE: doczytałem, w opisie metody jest, że query przygotowuje a potem odpala kod. Dzięki. Już wciskam 'pomógł' smile.gif Poza tym, dzięki _db mam dostęp do wszystkich metod, które potrzebowałem.
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.