2014-10-08 38 views
1

我有問題,在Symfony2的一些查詢,我有3個entites的(他們簡化了一下):加入3個表中的Symfony2

class Group 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @var string 
    * 
    * @ORM\Column(name="name", type="string", length=255) 
    */ 
    protected $name; 

    /** @ORM\OneToMany(targetEntity="GroupMember", mappedBy="family") */ 
    protected $groupMembers; 


class GroupMember 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\Column(name="id", type="integer") 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="AUTO") 
    */ 
    protected $id; 

    /** 
    * @ORM\Column(name="group_member_type", type="integer") 
    */ 
    protected $groupMemberType; 

    /** 
    * @ORM\ManyToOne(targetEntity="Group", inversedBy="groupMembers") 
    * @ORM\JoinColumn(name="group_id", referencedColumnName="id", nullable=false) 
    */ 
    protected $group; 

/** 
* @ORM\ManyToOne(targetEntity="Test\UserBundle\Entity\User", inversedBy="memberships") 
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false) 
*/ 
protected $user; 

用戶 - >標準FOSuserbundle用戶

我要打查詢返回當前用戶是組成員的所有組。有人能告訴我該怎麼做嗎?

這裏是我的嘗試:

SELECT g FROM (group g INNER JOIN groupmember gm ON g.id=gm.group_id) INNER JOIN fos_user u ON gm.user_id = u.id WHERE u.id = 6 

但它返回

Unknown column 'g' in 'field list' 
+1

莫非你精確的實體之間的關係? – theofabry 2014-10-08 10:26:18

+0

我更新了我的問題 – user1483208 2014-10-08 11:30:26

+0

您沒有使用Doctrine的查詢構建器的原因? – 2014-10-08 14:50:35

回答

3

使用查詢生成器,假設你已經獲取的用戶並將其存儲在$userObject中,並且您的軟件包名稱爲BundleName

$groups = $this->getDoctrine()->getManager()->createQueryBuilder() 
    ->select('g') 
    ->from('BundleName:Group', 'g') 
    ->innerJoin('g.groupMembers', 'gm') 
    ->innerJoin('gm.user', 'u') 
    ->where('u = :user') 
    ->setParameter('user', $userObject) 
    ->getQuery() 
    ->getResult(); 

您還需要確保您的關係映射是正確的。

/** @ORM\OneToMany(targetEntity="GroupMember", mappedBy="family") */ 
protected $groupMembers; 

應該

/** @ORM\OneToMany(targetEntity="GroupMember", mappedBy="group") */ 
protected $groupMembers; 
+0

中寫出正確的查詢完美!謝謝! – user1483208 2014-10-08 16:23:49

0

這是正確的查詢:

SELECT g.* FROM (group g INNER JOIN groupmember gm ON g.id=gm.group_id) INNER JOIN fos_user u ON gm.user_id = u.id WHERE u.id = 6