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

dea*_*ase 6 doctrine query-builder doctrine-orm

我的查询是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();
Run Code Online (Sandbox Code Playgroud)

此刻,我在获得结果后使用if语句,是否有办法在此查询中执行if语句?

tim*_*dev 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();
Run Code Online (Sandbox Code Playgroud)