问题描述
客观
我正在尝试制作一种基本形式来招募新玩家参加这项运动。这取自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”关系。
如果您看到此问题,请从“向后”的角度重新编写您的关系,这应该可以解决问题。
谢谢!