我的查询是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语句?
答案 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();