Symfony Forms Error: Entity of type "..." passed to the choice field must be managed. Maybe you forget to persist it in the entity manager
Symfony Forms Error: Entity of type "..." passed to the choice field must be managed. Maybe you forget to persist it in the entity manager
Objective
我正在尝试制作一个基本表格来为一项运动签下新球员。这是取自 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
我有一个表格:
新玩家类型
https://github.com/ChimeraBlack1/Symphart/blob/main/src/Form/NewPlayerType.php
我有控制器:
新玩家控制器
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”。
如果您看到这个问题,请从“倒退”的角度重新编写您的关系,这样应该可以解决问题。
谢谢!
Objective
我正在尝试制作一个基本表格来为一项运动签下新球员。这是取自 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
我有一个表格:
新玩家类型 https://github.com/ChimeraBlack1/Symphart/blob/main/src/Form/NewPlayerType.php
我有控制器:
新玩家控制器 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”。
如果您看到这个问题,请从“倒退”的角度重新编写您的关系,这样应该可以解决问题。
谢谢!