konto usunięte

Temat: Doctrine i skomplikowa baza

Mam aplikację która korzysta z rozbudowanej pod względem relacji bazy danych.
Dla uproszczenia powiedzmy że mam tylko 4 encje:
User - zawiera userDataId oraz userId2
UserData
Meet - zawiera userId organizatora i relację ManyToMany do encji Guest, co tworzy w bazie tablicę Meet_Guest (wystarczyłoby OneToOne)
Guest - zawiera userId2

Klucz UserId2 istnieje z powodów biznesowych a nie braku umiejętności. Jest konieczny dla zachowania spójności systemu.
W MeetRepository mam funkcję która powinna mi zwrócić tablicę wypełnioną encjami Meet z tablicą encji Guest dla danego Meet. Z tym że zarówno po UserId zawartym w Meet, jak i wszyscy Guest po UserId2 muszą pobrać dane z encji UserData poprzez encję User. A także UserId2 musi być obecny w encjach Guest.
W uproszczeniu naskrobałem taki kod do doctrine:


$qb->select('m AS meet', 'd.name AS name' )
->from('AppBundle:Meet', 'm')
->innerJoin('AppBundle:User', 'u', 'WITH', 'u.id = :userId')
->innerJoin('AppBundle:UserData', 'd', 'WITH', 'u.UserDataId = d.id')
->innerJoin('m.guests', 'g', 'WITH', 'u.userId2 = g.userId2')
->setParameter('userId', $userId)
->getQuery();


To mi załatwiło UserData dla organizatora Meet. Tablica encji Guest dla każdego Meet jest tworzona dzięki definicji ManyToMany. Ale już nie potrafię wyciągnąc UserData dla każdego Guest z m.guests
Nie chciałbym tego robić tworząc sztywną relację ManyToOne w Encji Guest. Ponieważ Guest jest wykorzystywany w innych procesach i każdorazowy join powodowałby duże obciążenie. Pytanie więc co wstawić do powyższego kodu lub jak to najlepiej zrobić aby robić join Guest-UserData tylko w tym konkretnym przypadku?Ten post został edytowany przez Autora dnia 27.12.16 o godzinie 22:04