Проблема с хранилищем addSelect () doctrine. Отношение многие ко многим - PullRequest
0 голосов
/ 19 марта 2020

У меня есть symfony 5, doctrine 2и php 7.3

Четыре объекта:

  1. OrderworkMeeting, которые содержат одно собрание
  2. собрание, которое содержит несколько MeetingUsers,
  3. MeetingUser, которые содержат одного пользователя и одно собрание (для связи между многими и многими между собранием и пользователем)
  4. Пользователь

Когда я делаю запрос в Репозиторий 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?

Большое спасибо за вашу помощь

...