2012-09-04 11 views
5

多対多関係のuser、role、user_x_roleの3つの単純なテーブルがあります。私は2つのエンティティ:ユーザーと役割を持っています。ユーザーエンティティには、$ userRolesプロパティーとrelation注釈があります。コントローラでは、特定の役割を持つすべてのユーザーを取得する必要があります。しかし、コントローラでJOINを使う方法はわかりません。現在の間違ったコード:symfony2のJOIN基準を持つfindBy

$role = $this->getDoctrine()->getRepository('TestBackEndBundle:Role'); 
$roles = $role->findBy(array('name' => 'ROLE_PARTNER')); 

$user = $this->getDoctrine()->getRepository('TestBackEndBundle:User'); 
$partners = $user->findBy(array('userRoles' => $roles)); 

「未定義インデックス:joinColumns in ...」と表示されます。しかし、私はユーザーエンティティのjoinColumnsを持っています:

/** 
* @ORM\ManyToMany(targetEntity="Role") 
* @ORM\JoinTable(name="user_x_role", 
*  joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")}, 
*  inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id", onDelete="CASCADE", onUpdate="CASCADE")} 
*) 
* @var ArrayCollection 
*/ 
protected $userRoles; 

答えて

12

IMOそれはあなたのために自分のリポジトリを作成するためのエンティティです。次に、そのリポジトリで、 "getUsersByRole"のようなメソッドを作成します。ここでは、クエリビルダーで必要なクエリを作成します。

$qb = $this->getEntityManager()->createQueryBuilder(); 
$qb->select('u') 
    ->from('\namespace\for\User', 'u') 
    ->join('u.roles', 'r') 
    ->where(...) 

return $qb->getQuery()->getResult(); 
関連する問題