Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZF][ZendFramework] Problem z łączeniem tych samych tabel
lubski
post 29.03.2011, 16:31:47
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.11.2007

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


Oto przykład mojego kodu który ma wyciągnąć moje drzewko z menu:
Próbuje utworzyć zapytanie łączące dwie takie same tabele.

  1. class Application_Model_Menu extends Zend_Db_Table_Abstract {
  2. protected $_name = 'foto_menu';
  3.  
  4.  
  5. public function generateMenu()
  6. {
  7. $sel = $this->select()
  8. ->setIntegrityCheck(false)
  9. ->from( array('a' => $this->_name), array( 'name1' => 'a.name') )
  10. ->from( array('b' =>$this->_name), array('name2' => 'b.name2') )
  11. ->joinleft( array('b' => $this->_name) , 'b.parentid = a.id')
  12. ->where('a.public = 1 AND b.public = 1');
  13.  
  14. $menu = $this->fetchAll($sel);
  15.  
  16. }
  17.  
  18. }


Mam problem z połączeniem dwóch lub trzech poziomów w tabeli. Dostaje komunikat o treści:
You cannot define a correlation name 'b' more than once

Chciałbym też aby w from w sql nie dochodził na końcu znak '*' gdyż nie potrzebuje wszystkich kolumn z tabeli tylko te co mam w from.

Może mi ktoś pomóc ?

Podejrzewam że problem jest banalny ale siedzę chwile nad tym a nie znalazłem podobnych przykładów na necie.
Go to the top of the page
+Quote Post
yevaud
post 29.03.2011, 16:45:38
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

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


->from( array('b' =>$this->_name), array('name2' => 'b.name2') )
->joinleft( array('b' => $this->_name) , 'b.parentid = a.id')

nadales 2 razy alias "b"
Go to the top of the page
+Quote Post
lubski
post 29.03.2011, 20:31:09
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.11.2007

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


No dobra. Ale jak nadam alias już w join to co mam wpisać w from? Potrzebuje tylko pole name z aliasem name2 i name1.
Może zapodam temat z drugiej strony. Sam sql wygląda tak.

  1. SELECT a.name AS name1, b.name AS name2 FROM foto_menu AS a
  2. LEFT JOIN foto_menu AS b ON b.parentid = a.id
  3. WHERE a.public = 1 AND b.public = 1


Potrzebuje taki sql w moim modelu.
Nie widziałem podobnego przykładu na necie. Problem chyba polega na łączeniu tej samej tabeli.

Możesz napisać jak to ma być poprawnie napisane ?
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: 14.08.2025 - 04:13