@qlr

Запись в БД значений из EntityType в FormBuilder?

Проще, наверное, показать кодом:
Есть entity User, у него есть ManagerId, то бишь integer.
/** @ORM\Column(name="manager_id", type="integer", nullable=true) */
    protected $managerId;


Есть форма, где создается данный юзер через FormBuilder
->add('managerId', EntityType::class, array(
            'label' => 'Менеджер',
            'class' => 'WPUserBundle:User',
            'query_builder' => function (EntityRepository $er) {
                return $er->createQueryBuilder('u')
                    ->setParameter('role', '%MANAGER%')
                    ->where('u.roles LIKE :role');
            },
            'choice_label' => 'id',
            'choice_value' => 'id',
            'choice_name' => 'id',
            'empty_data' => 1
            ))


Собственно нужно, чтобы при выборе в форме определенного юзера, его Id добавлялась в ManagerId нового юзера.
Последние значения, как можно было понять это то, что я пробую, но ни черта не получается. Вываливается такой exception:
Notice: Object of class WP\UserBundle\Entity\User could not be converted to double

как я понимаю, потому что в списках перечисленных значений там, где должна стоять id, почему-то стоит {}, то бишь array.
При этом в форме всё показывается нормально, ставлю choice_label = id, показывается id.
Может я опцию какую-то еще не знаю или не смог прокурить нормально док?
  • Вопрос задан
  • 186 просмотров
Решения вопроса 1
@qlr Автор вопроса
Спасибо BoShurik за наводку.
С помощью DataTransformer решить проблему не удалось, почему-то данные он всё равно не преобразовывал. Поэтому пошел костылем, сделал SUBMIT event на форме и такой код:
->addEventListener(FormEvents::SUBMIT, function (FormEvent $event) {
                $user = $event->getData();
                $form = $event->getForm();
                if (!$user) {
                    return;
                }
                $manager = $user->getManagerId(); 
                if (!$manager) {
                    return;
                }
                $user->setManagerId($manager->getId());
            })
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Так задумано, что в $managerId хранится именно ID, а не объект?
Если да, то вам нужен DataTransformer.
Если там должен быть объект, то у вас неверный маппинг: docs.doctrine-project.org/projects/doctrine-orm/en...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы