doctrine 2 - query builder conditional queries… If

2019-04-08 01:32发布

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条回答
闹够了就滚
2楼-- · 2019-04-08 01:48

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();
查看更多
登录 后发表回答