Выражение QueryBuilder в FormBuilder

Я хотел бы знать, как использовать выражение 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?

Другой способ - создать запрос внутри репозитория и вызвать метод в форме, не забывайте, что вы должны возвращать экземпляр QueryBuilder, а не сам результат :-)

Smaïne 30.09.2018 23:14
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
1
230
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий
function (EntityRepository $repo) {
    $qb = $repo->createQueryBuilder('e');

    $qb
        ->andWhere($qb->expr()->in(...))
    ;

    return $qb;
}

Оно делает. В моих проектах их сотни.

Padam87 30.09.2018 23:28

Это не $er->expr, а $qb->expr()

Padam87 30.09.2018 23:30

А ~ Понятно ... Хитрость заключалась в том, чтобы создать экземпляр EntityRepository ... Спасибо

Preciel 01.10.2018 02:48

@Preciel Экземпляр QueryBuilder, а не EntityRepository.

NicolasB 01.10.2018 04:10

Вы можете получить доступ к построителю выражений через EntityManager, а затем получить построитель выражений, например:

$builder->add('client', EntityType::class, array(
    'class'=>Entity::class,
    'query_builder'=>function(EntityRepository $er) {
        $expr = $er->getEntityManager()->getExpressionBuilder();
        // .. 
    },
));

Надеюсь на эту помощь

Ваш ответ тоже верен, но ответ Падама легче запомнить ...;)

Preciel 01.10.2018 02:49

Да @Preciel, другой ответ проще

Matteo 01.10.2018 09:56

Другие вопросы по теме