Доктрина 2 - условные запросы построителя запросов Если операторы?

Мой запрос - doctirne 2. У меня есть поле статуса в пользователях, частное или общедоступное. Я хочу иметь возможность запускать этот запрос и отображать все комментарии, где status = public и private, только если идентификатор пользователя = текущий зарегистрированный идентификатор пользователя (который я знаю, $ loggerUserVarID)

  $q = $this->em->createQueryBuilder()
            ->select('c')
            ->from('\Entities\Comments', 'c')
            ->leftJoin('c.users', 'u')
            ->where('status = public')  ???  display all public comments but private if it belpongs to the logged in user.?
            ->setParameter(1, $loggerUserVarID)
            ->getQuery();

на данный момент я использую оператор if после получения результатов, есть ли способ сделать оператор if внутри этого запроса?


person dean jase    schedule 10.10.2011    source источник
comment
Что раздражает: у комментария есть свойство пользователя - это означает, что к комментарию привязано несколько пользователей? Как это будет работать? У комментария не может быть только один владелец (пользователь)?   -  person Max    schedule 11.10.2011


Ответы (1)


Итак, вы хотите вернуть комментарии «Если статус« общедоступный »или ownerId равен $ loggedUserVarID», верно?

Обратите внимание, что если $ loggedUserVarID совпадает с владельцем, вас не волнует статус.

Ознакомьтесь с документацией по построителю запросов и dql. Они довольно четко объясняют, как собрать сложные условия.

Вероятно, вам нужно что-то вроде:

$q = $this->em->createQueryBuilder()
            ->select('c')
            ->from('\Entities\Comments', 'c')
            ->join('c.users', 'u')
            ->where(
                $qb->expr()->orX(
                    $qb->expr()->eq('status','public'),
                    $qb->expr()->eq('u.id',$loggedInUser)
                )
           )
         ->setParameter(1, $loggerUserVarID)
         ->getQuery();
person timdev    schedule 11.10.2011
comment
вы также можете сделать это так: $ ors = $ qb- ›expr () -› orX (); $ ors- ›add ($ qb-› expr () - ›like ('firstName', $ qb-› expr () - ›literal (% john%))); $ ors- ›add ($ qb-› expr () - ›like ('lastName', $ qb-› expr () - ›literal (% john%))); $ qb- ›andWhere ($ ors); - person Nuryagdy Mustapayev; 25.04.2020