doctrine 2 - query builder conditional queries… If

2019-04-08 01:44发布

问题:

My query is doctirne 2. i have a status field in users, private or public. i want to be able to run this query and display all comments where status= public and private only if userid = current logged in user id(which i know, $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();

at the moment, i am using an if statement after i get thee results, is there a way to do an if statement inside this query?

回答1:

So, you want to return Comments "If status is 'public' or the ownerId is $loggedUserVarID", right?

Note that if $loggedUserVarID matches the owner, you don't really care about status.

Check out the querybuilder and dql docs. They explain pretty clearly how to put together complex where conditions.

What you probably want is something like:

$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();