Symfony Doctrine if querybuilder中的语句

时间:2017-09-06 09:56:26

标签: php mysql symfony doctrine-orm doctrine

是否可以在doctrine查询构建器中插入IF语句?例如:我有UserGroup个实体与OneToMany关系。组具有布尔字段hidden。如果hidden所有者不是当前用户,如何创建将选择Group = false的组的查询构建器。这样只有组所有者才能看到hidden = true组。和其他用户只能看到hidden = false groups

 $qb = $this->createQueryBuilder('group')
        ->where('group.owner = :userId')
        ->setParameter('userId', $user->getId())
        ->orderBy('group.created', 'DESC');

1 个答案:

答案 0 :(得分:2)

这应该符合您的需求

$qb = $this->createQueryBuilder('group');

$qb
    ->where(
      $qb->expr()->andX(
        $qb->expr()->eq('group.owner', ':userId'),
        $qb->expr()->eq('group.hidden', true)
      )
    )
    ->orWhere($qb->expr()->eq('group.hidden', false))
    ->setParameter('userId', $user->getId())
    ->orderBy('group.created', 'DESC');

只有当前用户是所有者且隐藏了组时,查询的第一部分才会保留一行。

第二部分将包括所有非隐藏组。