Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [Symfony] łączenie dwa razy tej samej tabeli
AxZx
post 13.10.2008, 20:09:43
Post #1





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


witam

mam tabele, w której są kolumny idprofil_nadawca oraz idprofil_odbiorca.
chciałbym w widoku mieć dostęp do obiektu profil zarówno nadawcy jak i odbiorcy.

zrobiłem coś takiego
  1. <?php
  2. $c->addAlias('p1', ProfilPeer::TABLE_NAME);
  3.        $c->addAlias('p2', ProfilPeer::TABLE_NAME);
  4.        $c->addJoin(PocztaPeer::IDPROFIL_NADAWCA, ProfilPeer::alias('p1', ProfilPeer::IDPROFIL), Criteria::INNER_JOIN);
  5.        $c->addJoin(PocztaPeer::IDPROFIL_ODBIORCA, ProfilPeer::alias('p2', ProfilPeer::IDPROFIL), Criteria::INNER_JOIN);
  6. ?>


ale nie wiem jak zrobić, żeby pobrać teraz te kolumny z tabeli profil i jeszcze żeby w widoku mieć dostęp do tych oddzielnych obiektów.

nie wiem jak się do tego zabrać. proszę o pomoc.
pozdrawiam


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Whisller
post 13.10.2008, 20:13:14
Post #2





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


Jak masz je połączone kluczem obcym to doSelectJoinAll i propel sam zrobi ci INNER JOIN na tabelach.
Później tylko $obj->getNazwaTabeliOdbiorcow()->, $obj->getNazwaTabeliNadawcow()->.

Ten post edytował Whisller 13.10.2008, 20:14:09


--------------------
Blog | Strona www | wicia.pl
Go to the top of the page
+Quote Post
AxZx
post 13.10.2008, 20:20:20
Post #3





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


właśnie w tym problem, że nie robi Inner Join tylko zwykłego joina.
a to mi trochę przeszkadza bo zapytanie nie zwraca takich wyników jakich bym oczekiwał.
jak w metodzie doSelectJoinAll zamienie te zwykłe joiny na inner, to jest błąd polegający na tym, że tabela profil nie jest unikalna.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Whisller
post 13.10.2008, 20:27:07
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 5
Dołączył: 29.03.2006
Skąd: Poznań

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


Hmm wydaje mi się że coś musisz mieć źle. Ponieważ propel defaultowo przy doSelectJoinAll robi INNER JOIN na tabelach.

Sprawdź w klasie Peerowej czy masz metody doSelectJoin{NazwaTabeliZKluczaObcego} bo może źle klucze wpisałeś...


--------------------
Blog | Strona www | wicia.pl
Go to the top of the page
+Quote Post
AxZx
post 13.10.2008, 20:43:21
Post #5





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


na pewno robi defaultowo łączenie Inner?
mi się wydaje, że jednak robi zwykłej łączenie, a dopiero jak użyjemy metody addJoin podając jako $operator Criteria::INNER_JOIN będzie robił INNER JOIN.

w schema.yml mam
Kod
idprofil_nadawca: {type: integer, foreignTable: profil, foreignReference: idprofil, required: true, onDelete: cascade}
idprofil_odbiorca: {type: integer, foreignTable: profil, foreignReference: idprofil, required: true, onDelete: cascade}


raczej jestem przekonany, że nie robi Inner Join. łączy po przecinku czyli zwykły join.

Ten post edytował AxZx 13.10.2008, 20:56:09


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
Wojciech Bańcer
post 13.10.2008, 21:03:07
Post #6





Grupa: Zarejestrowani
Postów: 12
Pomógł: 3
Dołączył: 8.05.2007
Skąd: Poznań

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


Jak o tym czytałem, to natknąłem się na taki artykuł:
http://compzone.org/art-Symfony+&+Prop...+tabeli-64.html
To chyba jedyna droga przy propelu < 2.0. Dopiero w wersji 2.0 maja to poprawić.
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: 29.06.2025 - 07:01