В приложении Symfony 4.4 у меня есть отношение OneToOne между 2 сущностями BaseWord (с 2 полями: id и псевдоним) и DeWord (с 3 полями: id, value, baseWord). Поле baseWord представляет экземпляр сущности BaseWord.
Для создания экземпляров DeWord я использовал построитель форм
$builder
->add('value')
->add('baseWord', EntityType::class, [
'class' => BaseWord::class,
'choice_label' => 'alias',
]);
И передавая сущность DeWord из контроллера
$deWord = new DeWord();
$form = $this->createForm(DeWordType::class, $deWord);
Это решение может работать, но у меня есть миллионы объектов baseWord, и SELECT, сгенерированный в форме, замедляет мое приложение.
Итак, я внес некоторые изменения
-> Я добавил query_builder, чтобы поместить только один опцию в SELECT
-> Я добавил несопоставленный ввод, чтобы позволить пользователю ввести значение идентификатора baseWord
-> А затем, с помощью Ajax, я отправляю запрос получить соответствие baseWord с введенным значением, и я изменяю опцию SELECT
$builder
->add('value')
->add('baseword_id', IntegerType::class, [
'label' => 'Enter baseword id',
'mapped' => false,
])
->add('baseWord', EntityType::class, [
'class' => BaseWord::class,
'query_builder' => function (EntityRepository $entityRepository) {
return $entityRepository->createQueryBuilder('w')
->where('w.id = :id')
->setParameter('id', 1);
},
'choice_label' => 'alias',
]);
Это работает хорошо, но в контроллере, когда я отправляю форму, поле baseWord объекта DeWord равно NULL. Кто-нибудь может мне помочь?