Идентификатор доступа к DQL из свойства объекта с левым соединением - PullRequest
0 голосов
/ 27 ноября 2018

Я понял, что этот sql работает без проблем

SELECT meeting.name, meeting.date, community.name, participation.isPresent, participation.user_id
    FROM meeting
    INNER JOIN community
    ON meeting.community_id = community.id
    AND community.is_active = 1

LEFT join participation
    ON meeting.id = participation.meeting_id
    AND participation.user_id = 1078

WHERE meeting.date >= CURRENT_DATE()
ORDER BY meeting.date DESC

Я пытаюсь воспроизвести его с помощью построителя запросов доктрины, но я так и не получил правильный результат.Часть идентификатора пользователя, кажется, не является частью функции leftJoin, но применяется к запросу глобально, а это не то, что я хочу.

public function getNextMeetings()
{
    $qb = $this->createQueryBuilder('m')
        ->select('m.name AS meeting, m.date, c.name AS community, p.isPresent', 'IDENTITY(p.user) AS user')
        ->innerJoin('m.community', 'c')
        ->where('c.isActive = true')
        ->leftJoin('m.participations', 'p')

        //->leftJoin('p.user', 'u')
        //->where('u.id = 1078 OR u.id IS NULL')

        //->where('IDENTITY(p.user) = 1078')

        ->andWhere('m.date >= CURRENT_DATE()')
        ->orderBy('m.date', 'DESC');

    return $qb->getQuery()->execute();
}

Мои комментарии - это то, что я пытался решить эту проблему.

1 Ответ

0 голосов
/ 28 ноября 2018

Проверка Работа с QueryBuilder: высокоуровневые методы API

Точнее, определение od leftJoin () Функция:

public function leftJoin($join, $alias, $conditionType = null, $condition = null, $indexBy = null);

Вы можете поместить условие в присоединенную сущность следующим образом:

use Doctrine\ORM\Query\Expr;

->leftJoin('m.participations', 'p', Expr\Join::WITH, 'p.user = :userId')
->setParameter('userId', 1078)

Обратите внимание, что вам не нужно условие для "meeting.id = Participation.meeting_id", так как оно автоматически применяется отношением m.участие в построенном объединении.

...