Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework]Zapytania z do kilku tabel
johnyMajster
post 10.08.2012, 15:37:40
Post #1





Grupa: Zarejestrowani
Postów: 151
Pomógł: 2
Dołączył: 2.08.2012
Skąd: Wrocław

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


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?

Ten post edytował johnyMajster 10.08.2012, 15:40:03
Go to the top of the page
+Quote Post
irmidjusz
post 10.08.2012, 21:52:52
Post #2





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


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?


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
johnyMajster
post 11.08.2012, 09:33:31
Post #3





Grupa: Zarejestrowani
Postów: 151
Pomógł: 2
Dołączył: 2.08.2012
Skąd: Wrocław

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


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
Go to the top of the page
+Quote Post
ShadowD
post 11.08.2012, 12:23:41
Post #4





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


  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ć.


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
Pilsener
post 11.08.2012, 21:03:56
Post #5





Grupa: Zarejestrowani
Postów: 1 590
Pomógł: 185
Dołączył: 19.04.2006
Skąd: Gdańsk

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


Ż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
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: 26.04.2024 - 19:55