• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed Lączenie tabel Doctrine (innerJoin)

Object Storage Arubacloud
0 głosów
309 wizyt
pytanie zadane 31 marca 2019 w PHP przez hiper007 Stary wyjadacz (11,270 p.)
zamknięte 4 kwietnia 2019 przez hiper007

Witam!

Mam dwie tabele w bazie:

1. Samochody(id,Marka,Model,Produkcja,Komentarz)

2.Kierowcy(Imie,Nazwisko,Wiek,Auto_id(klucz obcy))

Chce połaczyc te dwie tabele przy uzyciu funkcji createQueryBuilder

public function queryCar5()
    {
        return $this->createQueryBuilder('s')
            ->select('k.Imie,k.Nazwisko,k.Wiek,s.Marka,s.Model')
            ->from('Samochody','s')
            ->innerJoin('k','Kierowcy')
            ->where('s.id = :val')
            ->setParameter('val', 'k.Auto_id')
            ->getQuery()
            ->getResult()
        ;
    }

Oto blad:

Uncaught PHP Exception Doctrine\ORM\Query\QueryException: "[Semantical Error] line 0, col 87 near 'k Kierowcy WHERE': Error: Class 'k' is not defined." at C:\xampp\htdocs\symfony4\vendor\doctrine\orm\lib\Doctrine\ORM\Query\QueryException.php line 65

 

in \vendor/doctrine/orm/lib/Doctrine/ORM/Query/QueryException.php (line 65)

  1.      *
  2.      * @return QueryException
  3.      */
  4.     public static function semanticalError($message, $previous = null)
  5.     {
  6.         return new self('[Semantical Error] ' . $message, 0, $previous);
  7.     }
  8.  
  9.     /**
  10.      * @return QueryException
  11.      */
komentarz zamknięcia: Problem rozwiązany

1 odpowiedź

+1 głos
odpowiedź 31 marca 2019 przez Ehlert Ekspert (212,670 p.)
wybrane 4 kwietnia 2019 przez hiper007
 
Najlepsza

Mam wrażenie że nie do końca rozumiesz ideę posługiwania się doctrinem. Tutaj nie wyciągasz danych do tablic asocjacyjnych, ale do zmapowanych połączonych już obiektów. 

  • Używaj aliasów czy k, s itp, oraz FQCN. Będzie to oczywiście namespace klasy która reprezentuje wyciągany obiekt.
  • Nie używaj nazw kolumn z bazy danych, tylko nazw pół z obiektów.
  • Źle użyłeś parametru. Oba wyrażenia w where są elementem schemy, więc nie trzeba tam nic parametryzować. 
  • Widzę że chcesz głównie wyciągać kierowców. Upewnij się że Twoją metoda znajduje się w repo encji kierowcy.
komentarz 1 kwietnia 2019 przez hiper007 Stary wyjadacz (11,270 p.)
A powiedz mi czy żeby inner zadziałał to muszą być określone relacje w Encji Kierowcy oraz Samochody? ManyToOne i OneToMany... Czy bez tego powinno działałac. Rozumiem że w Samochodach przy atrybucie Autoid(klucz obcy) będzie ManyToOne, a w Encji Kierowcy przy id(klucz podst) będzie OneToMany.
komentarz 4 kwietnia 2019 przez hiper007 Stary wyjadacz (11,270 p.)

Działa:

 public function queryOwner5()
    {
        return $this->createQueryBuilder('k')
            ->select('k.Imie','k.Nazwisko','k.Wiek','s.Marka','s.Model')
            ->innerJoin('App\Entity\Samochody','s','WITH','k.id=s.Owner')
            ->where('k.Imie = :val')
            ->setParameter('val', 'Julia')
            ->getQuery()
            ->getResult()
        ;
    }

 

Podobne pytania

0 głosów
1 odpowiedź 353 wizyt
pytanie zadane 13 marca 2018 w PHP przez MiguelSantos Początkujący (270 p.)
+1 głos
1 odpowiedź 153 wizyt
pytanie zadane 3 grudnia 2020 w PHP przez User007 Bywalec (2,400 p.)
0 głosów
1 odpowiedź 98 wizyt
pytanie zadane 22 lutego 2020 w PHP przez XiverKi Bywalec (2,050 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...