Тип формы для представления отношения сущности - PullRequest
0 голосов
/ 14 марта 2020

В приложении 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. Кто-нибудь может мне помочь?

...