Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Symfony] łączenie dwa razy tej samej tabeli
Forum PHP.pl > Forum > PHP > Frameworki
AxZx
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
Whisller
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()->.
AxZx
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.
Whisller
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ś...
AxZx
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.
Wojciech Bańcer
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ć.
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.