2013-10-26 501 views
0

我編輯線程放置更多信息。學說多對多關係

我有「用戶」實體和「Rol」實體,我正在努力工作收集用戶的角色。

在我定義的用戶實體:

/** 
* @ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil") 
* @JoinTable(name="usuarios_perfiles", 
*  joinColumns={@JoinColumn(name="idUsuario", referencedColumnName="idusuario")}, 
*  inverseJoinColumns={@JoinColumn(name="idPerfil", referencedColumnName="idperfil")} 
*) 
*/ 
protected $perfiles; 

並在構造函數:

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

類的命名空間放前:

use AppsManantiales\CommonBundle\Entity\Perfil; 

當執行:

php app/console generate:doctrine:entities CommonBundle 

一個錯誤出現:

[Doctrine\Common\Annotations\AnnotationException]                     
    [Semantical Error] The annotation "@ManyToMany" in property AppsManantiales\CommonBundle\Entity\Usuario::$perfiles was never impo 
    rted. Did you maybe forget to add a "use" statement for this annotation? 

任何想法?

+0

ü可以顯示完整的實體代碼?你如何使用mapper? – DaunnC

+0

哦,我已經更新了我的答案。所以它是'Symfony2' :) – DaunnC

+0

檢查@ManyToMany或@ORM \ ManyToMany。這個錯誤似乎是該教義無法找到這個特定的註釋。 – busypeoples

回答

0

第一部分:所以在這種情況下,您在Role實體和User實體之間得到了多對多的關係。首先,在生成後檢查r個實體是否正確。這裏u能找到建立不同的關係基本概念的例子:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html & & http://docs.doctrine-project.org/en/2.0.x/reference/association-mapping.html(第二個有原則的查詢示例的詳細信息)

你問題的第二部分:建立正確的關係,你的User要去的選擇查詢後水木清華像:

$user = $em->createQueryBuilder() 
    ->select('u, r') 
    ->from('YourBundle:User', 'u') 
    ->innerJoin('u.roles', 'r') 
    ->where('u.id IN (:ids)') 
    ->setParameter('ids', $ids) 
    ->getQuery() 
    ->getResult(); 

而且爲u猜測,U可以與您的訪問者的幫助下得到的角色:$user->getRoles()

PS是的,如果所有的實體都是正確的,你可以手動添加方法。

EDITED

哦SRY,我忘了,u使用Symfony2。因此,在默認情況下在你的實體,你長了這樣一行:

use Doctrine\ORM\Mapping as ORM; 

如u可以看到,U使用的所有註釋是前綴@ORM\。 exmpls:

/** 
* @ORM\Id 
* @ORM\Column(type="integer") 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 

所以只需添加前綴@ORM和結果:

/** 
* @ORM\ManyToMany(targetEntity="AppsManantiales\CommonBundle\Entity\Perfil") 
* @ORM\JoinTable(name="usuarios_perfiles", 
*  joinColumns={@ORM\JoinColumn(name="idUsuario", referencedColumnName="idusuario")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="idPerfil", referencedColumnName="idperfil")} 
*) 
*/ 
+0

感謝您的回覆。我改變線程的主體。帶着一個新問題。 – ramiromd