Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework]Zapytania z do kilku tabel
Forum PHP.pl > Forum > PHP > Frameworki
johnyMajster
Witam serdecznie

W ZF mamy takie cos Zend_Db_Table_Abstract z czego dziedziczą wszystkie tabele bazy danych.

Tego używamy jezeli robimy zapytanie do konkretnej tabeli. A co jesli chce zrobic zapytanie do całej bazy np join??
Spotkałem sie z czyms takim ze nie mogę zrobic zapytanie select z join jezeli nie podam dodatkowej konfiguracji np
  1. $konfiguracja = array(
  2. 'host' => 'localhost',
  3. 'username' => 'redaktor',
  4. 'password' => 'haslo',
  5. 'dbname' => 'strona',
  6. 'charset' => 'utf8'
  7. );
  8. $db = Zend_Db::factory('pdo_mysql', $konfiguracja);
  9. $select = $db->select()
  10. ->from()
  11. ->where()
  12. ->joinInner()
  13. ->joinLeft()
  14.  


Innymi słowy w jakiej klasie trzeba pisac takie zapytania bo normalnie używam klas tylko dla tabel a takie zapytania dotyczą całej bazy i wymagają dodatkowej konfiguracji mimo iż jest ona zdefiniowana w application.ini?questionmark.gif?
irmidjusz
Jeśli gdzieś tworzysz nowe połączenie z bazą za pomocą tej fabryki
  1. $db = Zend_Db::factory('pdo_mysql', $konfiguracja);

to jest jasne, że musisz do niej przekazać konfigurację.
Zamiast tego, pobierz już istniejące połączenie z bazą
  1. Zend_Db_Table_Abstract::getDefaultAdapter()

ale tak naprawdę, to nie wiem, o co Ci chodzi.

A relacje 1:n i n:m już przerobiłeś z tej książki?
johnyMajster
Chodzi mi o to że mam podaną konfiguracje bazy w application ini tak jak jest to w gajdzie np:
  1. resources.db.adapter = "pdo_mysql"
  2. resources.db.params.host = "localhost"
  3. resources.db.params.username = "redaktor"
  4. resources.db.params.password = "haslo"
  5. resources.db.params.dbname = "strona"
  6. resources.db.params.charset = "utf8"


I to wystarczy kiedy działam na pojedyńczej tabeli
Natomiast kiedy chciałbym wziąc coś z kilku tabel np za pomocą join nie mogę się odwołac do czegos takiego jak $this->select()->join

Muszę stworzyc instancje i użyc odnowa zdefiniowanej konfiguracji a ja chciałbym użyc mojej konfiguracji w application.ini.
Podejrzewam że nie wiem jak w tym zapisie: $this->select()->join słówko this zamienic na cos co jest moją bazą z pliku application.ini
ShadowD
  1. <?php
  2.  
  3. class Ss_Models_Authorization extends Zend_Db_Table_Abstract
  4. {
  5. protected $_name = 'authorization';
  6.  
  7. public function getAll()
  8. {
  9. $select = $this->select()
  10. ->setIntegrityCheck(false)
  11. ->from('authorization',array('id', 'name', 'label', 'description'))
  12. ->joinLeft('authorizationGrup', 'authorization.grupId = authorizationGrup.id', array('grupId'=>'id', 'grupName'=>'name', 'grupLabel'=>'label', 'grupDescription'=>'description'))
  13. ->order('authorizationGrup.id');
  14.  
  15. $data = $this->fetchAll($select)->toArray();
  16.  
  17. if(!empty($data)) {
  18. foreach($data as $row) {
  19. $return[$row['grupId']]['name'] = $row['grupName'];
  20. $return[$row['grupId']]['label'] = $row['grupLabel'];
  21. $return[$row['grupId']]['description'] = $row['grupDescription'];
  22. $return[$row['grupId']]['elements'][$row['id']]['name'] = $row['name'];
  23. $return[$row['grupId']]['elements'][$row['id']]['label'] = $row['label'];
  24. $return[$row['grupId']]['elements'][$row['id']]['description'] = $row['description'];
  25. }
  26. }
  27.  
  28. return $return;
  29. }
  30. }


Przykład pliku modelu, jest strasznie stary jeszcze jak się uczyłem zend'a, ale zamysł ogólny masz jak powinno to wyglądać.
Pilsener
Żeby uściślić, przy pracy z np. ...Select zwróć uwagę na tą metodę:
  1. $select->setIntegrityCheck(false);


I gdy korzystasz z ORMów pisanych zgodnie ze sztuką to pamiętaj, że to nie czysty PHP - próba naruszenia relacji (a raczej każda relacyjna baza ich używa, nawet sqlite, mysql też jeśli mamy silnik innodb) czy choćby różnice pomiędzy danymi a strukturą tabeli będą skutkowały błędami. Lepiej od razu wyrobić dobre nawyki przy pracy z bazą, potem łatwiej się przesiąść na inny ORM, bazę czy nawet język programowania wink.gif
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.