2016-02-27 30 views
2

3個表之間一對多的關係選擇字段我有用戶實體:許多在教義和ZF2與查詢生成器

class User{ 
... 

/** 
* @var Module $modules 
* @ORM\ManyToMany(targetEntity="Adm\Entity\Module", inversedBy="users", cascade={"persist"}) 
* @ORM\JoinTable(
* name="user_module", 
* joinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")} 
*) 
*/ 
protected $modules; 

public function __construct() { 
    $this->modules = new \Doctrine\Common\Collections\ArrayCollection(); 
} 
... 
} 

和模塊實體:

class Module{ 
... 
/** 
* @ORM\ManyToMany(targetEntity="Adm\Entity\User", mappedBy="modules") 
*/ 
protected $users; 
... 
} 

我有三個表:用戶,模塊和user_module(用戶和模塊之間的關係,沒有額外的字段)。 我試圖建立一個查詢來獲取用戶(用於$ id)和模塊相關的他,這些關係是在user_module表中。這是我做過什麼:

public function getUser($id){ 
     $qb = $this->getEm()->createQueryBuilder() 
     ->select('u', 'm') 
     ->from('Adm\Entity\User', 'u') 
     ->join('u.modules', 'm') 
     ->where('u.id = ?1') 
     ->setParameter(1, $id) 
     ->setMaxResults(1); 
     $result = $qb->getQuery()->getResult(\Doctrine\ORM\AbstractQuery::HYDRATE_ARRAY); 
     return $result; 
    } 

但不與用戶,它只是把從模塊表,它具有相同的ID用戶1倍的結果使相關模塊。 請幫我建立這個查詢。謝謝!

+0

嘗試取出 - > setMaxResults(1) – Garry

+0

由於@Garry,去除該線和也我被反轉連接列註釋: '* joinColumns = {@ ORM \ JoinColumn(名稱= 「模塊id」,referencedColumnName =」 id =「 * inverseJoinColumns = {@ ORM \ JoinColumn(name =」user_id「,referencedColumnName =」id「)}' 它必須是這樣: '* joinColumns = {@ ORM \ JoinColumn(name = 「user_id」,referencedColumnName =「id」)}, * inverseJoinColumns = {@ ORM \ JoinColumn(name =「module_id」,referencedColumnName =「id」)} –

回答

0

我意識到,我倒相連接列聲明:

* joinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")} 

它必須是:

* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}, 
* inverseJoinColumns={@ORM\JoinColumn(name="module_id", referencedColumnName="id")} 

還有,我不得不在我的函數刪除此聲明,感謝@Garry將它指向我:

->setMaxResults(1) 

現在它按預期工作。