![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
Odnośnie tego co pisał batman i thm w innym moim poście chciałbym zrobić teraz poprawne pod względem technicznym wyświetlanie połączonych danych z dwóch tabel.
Powiem co zrobiłem: W folderze 'models' utworzyłem pliki: Ksiazki.php: Kod <?php class Ksiazki extends Zend_Db_Table { protected $_name = 'ksiazki'; protected $_primary = 'id_ksiazki'; } Autorzy.php: Kod <?php class Autorzy extends Zend_Db_Table { protected $_name = 'autorzy'; protected $_primary = 'id_autora'; } Natomiast w pliku IndexController.php mam: Kod public function indexAction() { $db = Zend_Registry::get('dbAdapter'); $select = $db->select() ->from(array('k' => 'ksiazki')) ->join(array('a' => 'autorzy'), 'k.id_autora = a.id_autora'); $this->view->lista = $db->fetchAll($select); } A w innym pliku wyświetlam wyniki zapytania. Wszystko działa, ale jak widzicie w pliku 'IndexController.php' nie robię chyba zbyt poprawnym sposobem przynajmniej takie odniosłem wrażenie po wypowiedzi batmana i thm?? Więc jak to powinno wyglądać prawidłowo ? Jak rozumiem powinno być w pliku IndexController.php coś takiego: Kod public function indexAction() { $ksiazkiTabela = new Ksiazki(); $autorzyTabela = new Autorzy(); } Ale co dalej - jak zrobić SELECTA ? Bo jak zrobię tak jak na tej stronie: http://framework.zend.com/manual/en/zend.d...t.building.join // Create the Zend_Db_Select object $select = $db->select(); to wrócę przecież do tego sposobu wyświetlania, który mam obecnie, a który nie jest podobno poprawny. Ten post edytował nieraczek 23.10.2008, 18:25:41 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 405 Pomógł: 6 Dołączył: 12.01.2007 Ostrzeżenie: (0%) ![]() ![]() |
W modelu Ksiazki zrobiłem tak:
Kod public function getBooksWithAuthors() { $this->select() ->from(array('k' => 'ksiazki')) ->join(array('a' => 'autorzy'), 'k.id_autora = a.id_autora'); return $this->fetchAll($select); } W kontrolerze tak: Kod $ksiazkiTabela = new KsiazkiTable(); $this->view->lista = $ksiazkiTabela->getBooksWithAuthors(); Jednak Kod var_dump($this->lista); zwraca mi NULL. W tej funkcji getBooksWithAuthors() chyba coś nie tak z zapytaniem ?A może jednak to niemożliwe żeby w modelu, który odpowiada za tabelę Ksiazki pobrać takze dane z tabeli Autorzy ? Bo na tej stronie jest opisana metoda taką jak robiłem poprzednio i określona mianem 'najlepszej praktyki': http://wiki.ekini.net/main/Zend_db Kod Best Practices [edit] What is the best way to do queries in Zend Framework? Please see this blog post http://blog.ekini.net/2008/02/12/what-is-the-safest-way-to-do-database-queries-in-zend-framework/ //Roman Nestertsov's way of doing it. $db = Zend_Registry::get(’dbAdapter’); $sql = $db->quoteInto(”SELECT * FROM Table1 WHERE id = ?”, $target_id); //Erik's way of doing it. $db = Zend_Registry::get(’dbAdapter’); $select = $db->select()-> from(’Table1′, ‘*’)-> where(’id = ?’, $id)-> where(’url = ?’, $url); $row = $db->fetchRow($select); Czyli tak jak robiłem poprzednio. Ale z drugiej strony wtedy nie potrzebne byłyby modele, czyli jednak jakoś powinno się to dać zrobić w klasie, tylko jak ? |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.10.2025 - 22:35 |