Symfony表单错误:必须管理传递给选择字段的类型为“ ...”的实体也许您忘记将其保留在实体管理器中

问题描述

客观

我正在尝试制作一种基本形式来招募新玩家参加这项运动。这取自Symfony 例如:

https://symfony.com/doc/current/form/dynamic_form_modification.html#form-events-submitted-data

代码

我有3个实体:

播放器列表 https://github.com/ChimeraBlack1/Symphart/blob/main/src/Entity/PlayerList.php

体育 https://github.com/ChimeraBlack1/Symphart/blob/main/src/Entity/Sport.php

位置 https://github.com/ChimeraBlack1/Symphart/blob/main/src/Entity/Position.php

我有一个表格:

NewPlayerType https://github.com/ChimeraBlack1/Symphart/blob/main/src/Form/NewPlayerType.php

我有一个控制器

NewPlayerController https://github.com/ChimeraBlack1/Symphart/blob/main/src/Controller/NewPlayerController.php

错误

Entity of type "Doctrine\Common\Collections\ArrayCollection" passed to the choice field must be managed. Maybe you forget to persist it in the entity manager?

详细信息:

每当我使用“ EntityType”类型的表单构建器创建表单时,似乎都会出现此错误

参考https://github.com/ChimeraBlack1/Symphart/blob/main/src/Form/NewPlayerType.php (第22行)

    ->add('sport',EntityType::class,[
        'class' => Sport::class,'query_builder' => function(EntityRepository $er) {
            return $er->createqueryBuilder('s')
                ->orderBy('s.sport','ASC');
        },'choice_label' => 'sport',])

在我看来,这是因为我以“ NewPlayerType”形式引用“ Sport :: class”。如果要引用“ PlayerList :: class”,则不会遇到此错误。但是,如何获取基于此类其他实体的字段以单个表格填充?我在概念上在这里想念一些东西...

解决方法

好的,经过20个小时的谷歌搜索,脸部苍白和愤怒的眼泪,我弄清楚了。

问题出在我在实体之间建立的关系上。我有“ OneToMany”关系,应该有“ ManyToOne”关系。

如果您看到此问题,请从“向后”的角度重新编写您的关系,这应该可以解决问题。

谢谢!

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...