6

我的查询是doctirne 2。我在用户中有一个状态字段,私人或公共。我希望能够运行此查询并仅在用户 ID = 当前登录用户 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 语句?

4

1 回答 1

9

所以,你想返回评论“如果状态是 'public' 或者 ownerId 是 $loggedUserVarID”,对吗?

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

查看 querybuilder 和 dql 文档。他们非常清楚地解释了如何组合复杂的 where 条件。

你可能想要的是这样的:

$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();
于 2011-10-11T02:14:03.530 回答