在Symfony2中使用JOIN条件查找

时间:2012-09-04 06:30:30

标签: php symfony doctrine doctrine-orm

我有3个简单的表:user,role,user_x_role with Many-To-Many relation。我有2个实体:用户和角色。用户实体具有带有关系注释的$ userRoles属性。在Controller中,我需要获取具有特定角色的所有用户。但我不知道如何在控制器中使用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));

它显示“Undefined index: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;

1 个答案:

答案 0 :(得分:16)

IMO最好的方法是为User实体创建自己的存储库。然后在该存储库中创建方法,如“getUsersByRole”,您可以使用查询构建器进行所需的查询。

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

 return $qb->getQuery()->getResult();