doctrine 2 - 查询构建器条件查询...如果语句?

时间:2011-10-10 17:46:12

标签: doctrine doctrine-orm query-builder

  

我的查询是doctirne 2.我在用户中有一个状态字段,私有或   上市。我希望能够运行此查询并显示所有注释   其中status = public和private仅当userid =当前登录时   用户ID(我知道,$ 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 个答案:

答案 0 :(得分:9)

所以,你要返回评论“如果状态为'公共'或者ownerId是$ loggedUserVarID”,对吧?

请注意,如果$ loggedUserVarID与所有者匹配,则您并不真正关心状态。

查看querybuilder和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();