tengo mis dos clases User
y Role
, y necesito hacer una QueryBuilder
que devuelve una consulta para los usuarios que tienen el rol ROLE_PROVIDER
. Necesito esto para un campo de formulario de la entidad en Symfony 2. En la definición del formulario Clase Tengo el siguiente fragmento de código para el campo mencionado:Doctrina 2 en Symfony 2 - Filtrado de una QueryBuilder por una asociación
$builder->add('provider', 'entity', array(
'class' => 'ElCuadreAccountBundle:User',
'property' => 'username',
'query_builder' => function(UserRepository $ur) {
return $ur->getUsersByRoleQB('ROLE_PROVIDER');
},
'required' => true,
));
Y luego en mi encargo UserRepository
tengo la siguiente función, que debe devolver una QueryBuilder
objeto:
public function getUsersByRoleQB($role) {
$qb = $this->createQueryBuilder('u');
return $qb->join('u.roles','r')
->where($qb->expr()->in('r.role',$qb->expr()->literal($role)))
->orderBy('u.username', 'ASC');
}
Por supuesto, esto no funciona, pero me pegó para ilustrar mis necesidades.
He estado buscando y parece que Doctrine2 no admite el filtrado nativo de una asociación. En this page lo dicen, y sugieren usar DQL
para este tipo de filtrado. Mi problema es que no he encontrado cómo hacer un objeto QueryBuilder
a partir de una sentencia DQL
. Si también pudiera proporcionarme la consulta correcta DQL
, le estaría muy agradecido ...
¡Gracias por su ayuda!
Gracias! realmente completa la respuesta ... Una pregunta, no está muy relacionada con la pregunta original, pero aquí voy ... He leído varias veces que vienen nuevas versiones de symfony 2 y doctrina 2, y la gente parece tener conocimiento de la nuevas características, pero estoy cansado de ejecutar 'php bin/vendors install', y no actualiza ni symfony ni doctrine ... ¿cómo puedo actualizar? ¿o cuándo serían esas nuevas versiones oficiales? ¡¡¡gracias por tu respuesta!!! – Throoze
Puede leer acerca de D2.2 aquí: http://www.doctrine-project.org/. S2 no tendrá D2.2 integrado hasta que se libere S2.1, probablemente este verano. Sin embargo, puede instalar D2.2 directamente, ajustar sus rutas en autoload.php y, en su mayor parte, su código de doctrina debería funcionar. Verifique los documentos para ver las cosas que debe tener en cuenta. – Cerad
¡Gracias por tus respuestas! – Throoze