Symfony2 form querybuilder с параметрами
Я хочу, чтобы моя сущность была в функции построителя запросов:
->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');
}
но получите сообщение:
Выражение типа 'Entity\Name' не разрешено в этом контексте
Итак, каков (лучший) способ предоставить информацию querybuilder.
Ответы
Ответ 1
Вы должны установить параметр отдельно следующим образом:
->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);
}
Вы можете использовать целое число или строку, но синтаксис немного отличается для каждого. См. документы
Ответ 2
Недавно я столкнулся с почти той же проблемой. Единственным отличием был параметр "query_builder", который должен быть установлен внутри "setDefaultOptions".
В основном форма создается следующим образом:
$builder->add('field', 'query_type', array('id' => 1));
Класс query_type выглядит следующим образом:
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'] );
};
},
));
}
}
Я использую функцию setNormalizers для доступа к массиву $options и оттуда я могу вызвать querybuilder с параметрами.
Надеюсь, это полезно для кого-то!