Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZendFramework]Mysql i relacje
ShadowD
post
Post #1





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

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


Trochę ułatwię sprawę na potrzeby stwierdzenie "czego najlepiej użyć", mamy następujące tabele:

PAGE
- id
- idStatus
- name
- value

STATUS
- id
- statusName

Jak najlepiej pobrać całość w jednym zapytaniu?

1. Jojn w zapytaniu
2. Coś takiego - http://blog.wilgucki.pl/2010/11/zenddb-i-relacje.html tutaj wydaje mi się że jest to bardziej do relacji 1:n
3. Pod zapytanie

Mam takie trzy możliwości, w każdej jest to do wykonania, ale nie wiem która z nich będzie najbardziej poprawna przy relacji 1:n wybrał bym #1 lub #2 w zależności od skomplikowania (z przewagą dla #2) a tutaj za skarby nie mogę się zdecydować, problem może nawet nie zendowski więc jak ukochani moderatorzy postanowią przenieść nie pogniewam się. (I nie ma tutaj sarkazmu :])
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
ShadowD
post
Post #2





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

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


Ok, zdecydowałem się na połączenie jein'em, rozumiem że joinLeft() będzie najlepszym rozwiązaniem, mamy jeszcze join() i inne pochodne.

Mam tylko jeden problem, może ktoś zna obejście problemu.

Kod modelu
  1. protected $_name = 'page';
  2.  
  3. public function getPage($name)
  4. {
  5. $select = $this->select()
  6. ->from('page',array('name', 'template', 'time', 'title', 'value'))
  7. ->where('name="'.$name.'"')
  8. ->setIntegrityCheck(false)
  9. ->joinLeft(array('status'=>'pageStatus'), 'page.idStatus = status.id',array('statusName'=>'name', 'statusActive'=>'active'))
  10. ->joinLeft(array('seo'=>'pageSeo'), 'page.idSeo = seo.id',array('seoTitle'=>'title', 'seoDescription'=>'description', 'seoKeywords'=>'keywords', 'seoFallow'=>'follow', 'seoIndex'=>'index'));
  11.  
  12. return $this->fetchRow($select)->toArray();
  13. }
  14. }


W tabeli page i pageStatus mam pole o takiej samej nazwie "name" próbuję zmienić jego nazwę na "statusName" (w tabeli status) dostaję komunikat o błędzie:
Message: SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'name' in where clause is ambiguous

Po zmianie nazwy pola na "nazwa2" wszystko działa jak powinno, jest opcja by zachować takie same nazwy pól i jakoś przy pobieraniu je zmienić?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 10.10.2025 - 10:10