Problém s Doctrine join rubrika: Programování: PHP
Zdravím,
mám problém s tím, jak dostat z Doctrine správný výsledky při join tabulky. Postupoval jsem podle tohoto: http://stackoverflow.com/questions/15087933/how-to-do-left-join-in-doctrine
Tady je moje query:
$qb = $this->getEntityManager()->createQueryBuilder(); $qb ->select('a', 'u') ->from('Application\Entity\Event', 'a') ->leftJoin( 'Application\Entity\Venue', 'u', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.venue_id = u.id' ) ->orderBy('a.event_datetime', 'DESC'); var_dump($qb->getQuery()->getResult());
Tady výsledek:
array (size=4) 0 => object(Application\Entity\Event)[483] protected 'id' => int 8 protected 'artist_id' => int 4 protected 'venue_id' => int 1246 protected 'name' => string 'Vlasta Redl' (length=11) 1 => object(Application\Entity\Venue)[477] protected 'id' => int 1246 protected 'name' => string 'Malostranská beseda' (length=20) ... 2 => object(Application\Entity\Event)[468] protected 'id' => int 7 protected 'artist_id' => int 3 protected 'venue_id' => int 761 protected 'name' => string 'Positive Mind' (length=13) 3 => object(Application\Entity\Venue)[485] protected 'id' => int 761 protected 'name' => string 'Divadlo pod lampou' (length=18) ....
Takže dostanu pole, kde se po sobě opakují různé objekty. S tim se sice dá pracovat, ale ideální to neni. Nehledě na to že ten výsledek by měl být jiný.
A tady to co bych čekal:
Nevíte co dělám blbě?
Díky
H.
edit.
Výsledek po užití \Doctrine\ORM\Query::HYDRATE_SCALAR:
0 => array (size=18) 'a_id' => int 8 'a_artist_id' => int 4 'a_venue_id' => int 1246 'a_name' => string 'Vlasta Redl' (length=11) 'a_event_datetime' => object(DateTime)[470] public 'date' => string '2015-01-09 13:51:36.000000' (length=26) public 'timezone_type' => int 3 public 'timezone' => string 'Europe/Prague' (length=13) 'u_id' => int 1246 'u_name' => string 'Malostranská beseda' (length=20)
etc...
Teď z toho mam pole a jsem bez objektů, tzn. že nemůžu volat metody na entitách, ty klíče jsou změněný, atd..
Nevím, jak vypadají entity, ale předpokládám, že tu anonymní vazbu v query používáš proto, že nemáš nadefinovanou relaci přímo na entitě. A právě ta anonymní vazba způsobuje, že ve výsledku máš ty dvojice objektů - Doctrine je nedokáže provázat a tak je vrátí zvlášť.
Popsané je to tady: http://doctrine-orm.readthedocs.org/en/latest/reference/dql-doctrine-que.... Popisují to jako aby si moh načítat i scalary, které nejsou definované na entitách (agregace apod.), ale v podstatě se to vztahuje na všechny data, který nejsou přímo přístupný z entity (jak jsme psal výše, chybí jasně definovaná vazba mezi Event a Venue).
Pro zobrazení všech 3 odpovědí se prosím přihlaste:
Nebo se přihlaste jménem a heslem: