доктрина 2 - построитель запросов условных запросов ... Если операторы? - PullRequest
6 голосов
/ 10 октября 2011

Мой запрос doctirne 2. У меня есть поле статуса в пользователях, приватных или общественности. я хочу иметь возможность выполнить этот запрос и отображать все комментарии где статус = публичный и приватный, только если идентификатор пользователя = текущий авторизованный идентификатор пользователя (который я знаю, $ 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 внутри этого запроса?

1 Ответ

9 голосов
/ 11 октября 2011

Итак, вы хотите вернуть Комментарии "Если статус 'public' или 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();
...