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”。

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

谢谢!