2015-12-15 44 views
0

我有一个配置文件和用户实体。配置文件可以通过以下三种方式之一涉及到用户:如何检查实体是否与Doctrine QueryBuilder具有ManyToMany关系

  • primaryUser
  • editUsers
  • viewUsers

这是一个基本的权限结构。我需要做的是获得全部个人档案由用户,无论授予权限。我认为如果我使用的是Doctrine 2.5。* QueryBuilder已经添加了'成员'比较,但是我在Symfony 2.7。*中,不幸的是Doctrine只能达到2.4 *(某种稳定性问题似乎如果你用小于Symfony 3来跳到Doctrine 2.5)。

我不确定如何复制功能。

<?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

解决方案...

使用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) 
; 
+0

谢谢!我不知道MEMBER OF和isMember的帮手在不同的时间被加入了教义。 – TheGremlyn

相关问题