【问题标题】:doctrine 2 - query builder conditional queries... If statements?学说 2 - 查询生成器条件查询...如果语句?
【发布时间】:2011-12-04 17:19:50
【问题描述】:

我的查询是doctirne 2。我在用户中有一个状态字段,私人或 民众。我希望能够运行此查询并显示所有 cmets 其中 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 语句?

【问题讨论】:

  • 什么恼人:评论有一个用户属性 - 意味着多个用户被映射到一个评论?那怎么行?评论不能只有一个所有者(用户)吗?

标签: doctrine doctrine-orm query-builder


【解决方案1】:

那么,你想返回 Comments "If status is 'public' or the ownerId is $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();

【讨论】:

  • 你也可以这样做: $ors = $qb->expr()->orX(); $ors->add($qb->expr()->like('firstName', $qb->expr()->literal("%john%"))); $ors->add($qb->expr()->like('lastName', $qb->expr()->literal("%john%"))); $qb->andWhere($ors);
猜你喜欢
  • 2011-09-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
  • 2016-04-02
  • 1970-01-01
  • 2013-09-29
相关资源
最近更新 更多