forms - symfony2 - symfony form
Symfony2 formador de consultas con parĂ¡metros (2)
Quiero poner mi entidad en la función del generador de consultas:
->add( ''weeks'', ''entity'', array(
''class'' => ''MV/CaravanBundle/Entity/CaravanRow'',
''property'' => ''line'',
''query_builder'' => function(EntityRepository $er ) use ( $caravan ) {
return $er->createQueryBuilder(''w'')
->orderBy(''w.dateFrom'', ''ASC'')
->where(''w.caravan = ?'', $caravan )
->andWhere(''w.visible = 1'')
->andWhere(''w.booked = 0'');
}
pero recibe el mensaje:
Expresión de tipo ''Entidad / Nombre'' no permitida en este contexto
Entonces, ¿cuál es la (mejor) manera de dar información al generador de consultas?
Debería establecer el parámetro por separado así:
->add( ''weeks'', ''entity'', array(
''class'' => ''MV/CaravanBundle/Entity/CaravanRow'',
''property'' => ''line'',
''query_builder'' => function(EntityRepository $er ) use ( $caravan ) {
return $er->createQueryBuilder(''w'')
->orderBy(''w.dateFrom'', ''ASC'')
->where(''w.caravan = ?1'')
->andWhere(''w.visible = 1'')
->andWhere(''w.booked = 0'')
->setParameter(1, $caravan);
}
Puede usar un entero o una cadena, pero la sintaxis es ligeramente diferente para cada uno. Ver los documentos
Recientemente me encontré con casi el mismo problema. La única diferencia fue que la opción ''query_builder'' debe establecerse dentro de ''setDefaultOptions''. Básicamente la forma se crea así:
$builder->add(''field'', ''query_type'', array(''id'' => 1));
La clase ''query_type'' se ve así:
class QueryType extends AbstractType
{
public function setDefaultOptions(OptionsResolverInterface $options)
{
$resolver->setRequired(array(''id''));
$resolver->setNormalizers(array(
''query_builder'' => function (Options $options, $configs) {
return function (EntityRepository $er) use ( $options ) {
return $er->getSomething( $options[''id''] );
};
},
));
}
}
Utilizo la función setNormalizers para acceder a la matriz $ options y desde allí puedo llamar al generador de consultas con parámetros.
Espero que esto sea útil para alguien!