Я хотел бы знать, как использовать выражение queryBuilder в formBuilder.
Общее использование построителя запросов в formBuilder:
$builder->add('client', EntityType::class, array(
'class'=>Entity::class,
'query_builder'=>function(EntityRepository $er) {
return $er->createQueryBuilder("e")
->where("e.active=1");
},
));
Теперь я хотел бы использовать ->expr()->in() в операторе where.
Проблема в том, что, в отличие от репозитория сущностей, $er->expr не работает.
Что мне делать, чтобы получить доступ к expr в операторе where?




function (EntityRepository $repo) {
$qb = $repo->createQueryBuilder('e');
$qb
->andWhere($qb->expr()->in(...))
;
return $qb;
}
Оно делает. В моих проектах их сотни.
Это не $er->expr, а $qb->expr()
А ~ Понятно ... Хитрость заключалась в том, чтобы создать экземпляр EntityRepository ... Спасибо
@Preciel Экземпляр QueryBuilder, а не EntityRepository.
Вы можете получить доступ к построителю выражений через EntityManager, а затем получить построитель выражений, например:
$builder->add('client', EntityType::class, array(
'class'=>Entity::class,
'query_builder'=>function(EntityRepository $er) {
$expr = $er->getEntityManager()->getExpressionBuilder();
// ..
},
));
Надеюсь на эту помощь
Ваш ответ тоже верен, но ответ Падама легче запомнить ...;)
Да @Preciel, другой ответ проще
Другой способ - создать запрос внутри репозитория и вызвать метод в форме, не забывайте, что вы должны возвращать экземпляр QueryBuilder, а не сам результат :-)