У меня есть symfony 5, doctrine 2и php 7.3
Четыре объекта:
- OrderworkMeeting, которые содержат одно собрание
- собрание, которое содержит несколько MeetingUsers,
- MeetingUser, которые содержат одного пользователя и одно собрание (для связи между многими и многими между собранием и пользователем)
- Пользователь
Когда я делаю запрос в Репозиторий OrderworkMeeting для получения всех OrederworkMeeting с одним указанным c пользователем, doctrine возвращает только одного пользователя, невозможно просмотреть других пользователей на одном собрании ???.
Я думаю, что это ошибка, потому что если я дублирую запрос до этого, но без указания c пользователя, это работает!
вот код:
$list = $repo_om->getByUser([15]);
foreach ($list as $oo) {
var_dump(count($oo->getMeeting()->getUsers()));
}
Return 1
$listForNothing = $repo_om->getByUser();
$list = $repo_om->getByUser([15]);
foreach ($list as $oo) {
var_dump(count($oo->getMeeting()->getUsers()));
}
Return 2
И в моем репозитории OrderworkMeeting:
public function getByUser($userId=0){
$qb = $this->createQueryBuilder('om');
$qb ->leftJoin('om.meeting', 'm')
->addSelect('m')
->leftJoin('m.users', 'mu')
->addSelect('mu')
->leftJoin('mu.user', 'u')
->addSelect('u');
$this->setQbListLink($qb);
$this->addQbOtherListLink($qb);
if($userId){
$or = $qb->expr()->orX();
$or->add('u.id IN (:id)');
$qb->setParameter('id', $userId);
$qb->andWhere($or);
}
->orderBy('m.date', 'DESC');
return $qb->getQuery()->getResult();
}
Что добавить, я не понимаю? Ваша помощь приветствуется, я думаю, что я дурак:)
Заранее спасибо
Редактировать:
После другого теста в моем проекте, я увидел, что мои doctrine запросы взорвались:
с addSelect (): 16 запросов, без: 84 запроса.
Так что мне действительно нужно addSelect, чтобы уменьшить количество запросов!
Я не понимаю, почему это решает мою проблему, когда я удаляю addSelect? Я прочитал, что addSelect "объединяет" поля запроса, но как и почему это меняет мой результат? Это пришло из полей name?
Большое спасибо за вашу помощь