2015-12-15 131 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

相關問題