Моя форма Symfony (3.3) EntityType отображается как выбор ввода и перечисляет всех клиентов, которые у нас есть в базе данных. Клиентский объект связан с несколькими другими объектами, использующими отложенный режим.
При отображении поля выбора выдается 204 запроса к БД. Я подозреваю, что компонент формы вызывает сеттеры для каждого результата запроса, что приводит к загрузке многих дополнительных запросов к базе данных.
Я думаю, мы могли бы установить сопоставление ассоциации как «EAGER» или использовать методы join('…')->addSelect('…') внутри параметра querybuilder формы, чтобы заставить данные быть частью результатов, но процесс гидратации все еще дорого, когда задействовано несколько сущностей.
Как видите, я пытался использовать Doctrine Query HINT, надеясь, что это решит проблему, но это ничего не изменило.
Тогда как же поступить в таком случае?
Что мне нужно сделать, чтобы получить только те поля, которые мне нужны для заполнения раскрывающегося списка?
Вот что я пробовал до сих пор:
$builder->add('parent', EntityType::class, [
'class' => Client::class,
,'required' => false
,'multiple' => false
,'query_builder' => function (EntityRepository $er) {
$qb = $er ->createQueryBuilder('c')
// All I want doctrine to fetch are the following fields
->select('PARTIAL c.{id,uuid,name,shortName}');
// I expected this flag to help but it does not change the total amount of queries executed
$qb->getQuery()->setHint(Query::HINT_FORCE_PARTIAL_LOAD, true);
return $qb;
}
])…
Спасибо.