如何检查Entity是否是与Doctrine QueryBuilder的ManyToMany关系之一

时间:2015-12-15 15:11:38

标签: php symfony doctrine-orm query-builder

我有个人资料和用户实体。配置文件可以通过以下三种方式之一与用户相关:

  • primaryUser
  • editUsers
  • viewUsers

它是一种基本的权限结构。我需要做的是按用户获取所有配置文件,无论授予哪些权限。我想如果我使用的是Doctrine 2.5。*我很好,因为QueryBuilder的成员是''比较补充说,但是我对Symfony 2.7。*并且不幸的是,Doctrine只能达到2.4。*(如果你跳到Doctrine 2.5而不是Symfony 3,它会出现某种稳定性问题。)

我不确定如何复制功能。

<?php
namespace AppBundle\Entity;

use Doctrine\Common\Collections\ArrayCollection;
use Doctrine\ORM\EntityRepository;

class ProfileRepository extends EntityRepository
{
    /**
     * @param User $user
     *
     * @return ArrayCollection
     */
    public function getAllByUser(User $user, $status = NULL)
    {
        $qb = $this->createQueryBuilder('p');
        $e  = $qb->expr();

        $qb->where($e->eq('p.primary_user', ':user'));
        // Some kind of comparison? a join?;
        $qb->setParameter('user', $user);
        $qb->setParameter('userId', $user->getId());

        if ($status) {
            $qb->andWhere($e->eq('p.status', ':status'));
            $qb->setParameter('status', $status);
        }

        return $qb->getQuery()->getResult();
    }
}

1 个答案:

答案 0 :(得分:1)

解决方案...

使用DQL:

SELECT p 
  FROM Profile p 
 WHERE p.primaryUser = :user 
    OR :user MEMBER OF p.editUsers 
    OR :user MEMBER OF p.viewUsers

使用QueryBuilder:

$qb = $this->createQueryBuilder("p");

$qb
    ->where("p.primaryUser = :user")
    ->orWhere(":user MEMBER OF p.editUsers")
    ->orWhere(":user MEMBER OF p.viewUsers")
    ->setParameter("user", $user)
;