SELECT p . * , u.username, us . * FROM `post` p LEFT JOIN fos_user u ON ( p.post_author_id = u.id ) LEFT JOIN user_setting us ON ( us.user_id = u.id ) WHERE topic_id =1
Sprawdzałem w PhpMyAdmin - dziala dobrze
teraz chcę owe zapytanie napisać za pomocą createQueryBuilder, doszedłem do piewszego left join, całość pobiera poprawnie
$qb->select('p, u.username') ->from($this->entityPath, 'p') ->leftJoin('p.postAuthor', 'u', 'WITH', 'p.postAuthor=u.id' ) ->addOrderBy('p.addedDate', 'ASC') ->where('p.topicId=:id') ->setParameter('id', $id) ;
jednakże nie wiem jak najlepiej dodać drugiego gdy relacja nie występuje pomiędzy post- user_setting a user-user_setting, po kilku kombinacjach doszedłem do czegoś takiego:
$qb->select('p, u.username, us') ->from($this->entityPath, 'p') ->leftJoin('p.postAuthor', 'u', 'WITH', 'p.postAuthor=u.id' ) ->leftJoin('UserBundle\Entity\UserSetting', 'us', 'WITH', 'us.user=u.id' ) ->addOrderBy('p.addedDate', 'ASC') ->where('p.topicId=:id') ->setParameter('id', $id) ;
tylko, że wynikowa tablica zupełnie mnie nie satysfakcjonuje
Nie chcę pisać specjalnie funkcji w PHP by to jakoś złączyć tak jak powinno wyglądać (chyba, że nie ma innego wyboru).
Czy znajdzie się dobra dusza, która doradzi mi jak to zrobić?
I relacje post.orm:
manyToOne: topic: targetEntity: Topic joinColumn: name: topic_id referencedColumnName: id postAuthor: targetEntity: User joinColumn: name: post_author_id referencedColumnName: id
user_setting.orm
oneToOne: user: targetEntity: User joinColumn: name: user_id referencedColumnName: id