type symfony2 query_builder query form entitytype forms symfony builder query-builder

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!