2012-09-04 13 views
5

Tengo 3 tablas simples: usuario, rol, user_x_role con relación Many-To-Many. Tengo 2 entidades: Usuario y Rol. La entidad de usuario tiene la propiedad $ userRoles con la anotación de relación. En Controller necesito buscar a todos los usuarios con un rol específico. Pero no sé cómo usar JOIN en el controlador. Código erróneo actual:findBy con los criterios de JOIN en Symfony2

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

Hace clic en "Índice no definido: joinColumns in ...". Pero tengo joinColumns en entidad de usuario:

/** 
* @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; 

Respuesta

12

IMO la mejor manera para ello es crear su propio repositorio para entidad de usuario. Luego, en ese repositorio, cree un método como "getUsersByRole" donde realiza la consulta que desea con el generador de consultas.

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

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