7

多対多の関係を持つuser、role、user_x_roleの3つの単純なテーブルがあります。ユーザーとロールの2つのエンティティがあります。ユーザーエンティティには、リレーションアノテーション付きの$userRolesプロパティがあります。コントローラでは、特定の役割を持つすべてのユーザーを取得する必要があります。しかし、コントローラーでJOINを使用する方法がわかりません。現在の間違ったコード:

$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));

「未定義のインデックス:joinColumnsin...」と表示されます。しかし、Userエンティティに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;
4

1 に答える 1

18

IMOの最善の方法は、ユーザーエンティティ用に独自のリポジトリを作成することです。次に、そのリポジトリで、クエリビルダーを使用して必要なクエリを作成する「getUsersByRole」のようなメソッドを作成します。

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

 return $qb->getQuery()->getResult();
于 2012-09-04T06:58:35.113 に答える