Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] DB class 2 tabele sortowanie
Forum PHP.pl > Forum > PHP > Frameworki
Zbawca
Witam

Przykładowo mam 2 tabele:
tabela1
-id
-name
-rodzic_id

tabela2
-id
-name_rodzic

mam pytanko jak stworzyć klasę tak aby pobierała dane z 2 tabel i można było sortować po obu tabelach jednocześnie używając

  1. <?php
  2. Zend_Loader::loadClass('Test');
  3. $test = new Test();
  4. $this->view->dane = $test->fetchAll(NULL,$sort);
  5. ?>


wiem jak to zrobić w formie zapytania
  1. <?php
  2. $select = $db->select()->from(arry('t1' =>'tabela1'), array('t1.name', 't1.id', 't1.rodz_id', 't2.name_rodzic'))
  3. ->join(array('t2' => 'tabela2'), 't1.rodzic_id = t2.id')
  4. ->order($sort);
  5. $this->view->dane = $select->query()->fetchAll();
  6. ?>

ale chciałbym to zrobić w klasie

bardzo proszę o pomoc
Sabistik
Przecież to wszystko jest opisane w manualu łopatologicznie. http://framework.zend.com/manual/en/zend.d...ationships.html
Zbawca
Mam klase
  1. <?php
  2. class Tabela2 extends Zend_Db_Table_Abstract {
  3. protected $_name = 'tabela2';
  4.  
  5. }
  6. class Test extends Zend_Db_Table_Abstract {
  7. protected $_name = 'tabela1';
  8. protected $_referenceMap = array(
  9. 'Rodzic' => array(
  10. 'columns'  => array('rodzic_id'),
  11. 'refTableClass'  => 'Tabela2',
  12. 'refColumns' => 'id'
  13. )
  14. );
  15. ?>


i po wywołaniu
  1. <?php
  2. Zend_Loader::loadClass('Test');
  3. $test = new Test();
  4. $this->view->dane = $test->fetchAll(NULL,'name_rodzic ASC');
  5. ?>

mam bład :
Fatal error: Uncaught exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'name_rodzic' in 'order clause'' in /var/www/htdocs/projekt/library/Zend/Db/Statement/Pdo.php:227 Stack trace: #0 /var/www/htdocs/projekt/library/Zend/Db/Statement.php(279): Zend_Db_Statement_Pdo->_execute(Array) #1 /var/www/htdocs/projekt/library/Zend/Db/Adapter/Abstract.php(396): Zend_Db_Statement->execute(Array) #2 /var/www/htdocs/projekt/library/Zend/Db/Adapter/Pdo/Abstract.php(206): Zend_Db_Adapter_Abstract->query(Object(Zend_Db_Select), Array) #3 /var/www/htdocs/projekt/library/Zend/Db/Table/Abstract.php(1104): Zend_Db_Adapter_Pdo_Abstract->query(Object(Zend_Db_Select)) #4 /var/www/htdocs/projekt/library/Zend/Db/Table/Abstract.php(987): Zend_Db_Table_Abstract->_fetch(NULL, 'name_rodzic ASC', NULL, NULL) #5 /var/www/htdocs/projekt/application/controllers/IndexController.php(72): Zend_Db_Table_Abstract->fetchAll(NULL, 'name_rodzic ASC') #6 /var/www/htdocs/projekt/library/Zend/Controller/Action.php(499) in /var/www/htdocs/projekt/library/Zend/Db/Statement/Pdo.php on line 227

Jestem początkującym z zendzie może czegoś nie rozumiem:(
Sabistik
Po pierwsze cała Twoja logika jest błędna. Przecież Ty masz tam relacje między tabelami, wiec co Ty chcesz sortować po kolumnie z drugiej tabeli? Może powiedz co chcesz uzyskać... Poza tym fetxhAll() służy do uzyskiwania danych ze zdefiniowanej tabeli a nie jej relacji.

Jeśli chcesz takie zapytanie jak podałeś w pierwszym poście w select() to tu relacje nie maja nic wspólnego. Najlepiej stworzyć sobie dodatkowa metode i w niej tworzyć podane zapytanie - taki sposób jest najefektywniejszy.
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.