Php 通过Symfony2中的联接条件查找
我有3个简单的表:user、role、user\u x\u role和多对多关系。我有两个实体:用户和角色。用户实体具有带关系注释的$userRoles属性。在控制器中,我需要获取具有特定角色的所有用户。但我不知道如何使用加入控制器。当前错误代码:Php 通过Symfony2中的联接条件查找,php,symfony,doctrine,doctrine-orm,Php,Symfony,Doctrine,Doctrine Orm,我有3个简单的表:user、role、user\u x\u role和多对多关系。我有两个实体:用户和角色。用户实体具有带关系注释的$userRoles属性。在控制器中,我需要获取具有特定角色的所有用户。但我不知道如何使用加入控制器。当前错误代码: $role = $this->getDoctrine()->getRepository('TestBackEndBundle:Role'); $roles = $role->findBy(array('name' => 'RO
$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;
IMO最好的方法是为用户实体创建自己的存储库。然后在该存储库中创建类似“getUsersByRole”的方法,在该方法中使用query builder进行所需的查询
$qb = $this->getEntityManager()->createQueryBuilder();
$qb->select('u')
->from('\namespace\for\User', 'u')
->join('u.roles', 'r')
->where(...)
return $qb->getQuery()->getResult();