Symfony Form:如何将正在创建的实体设置为新的单向关系的目标?

Symfony Form: how to set the entity being created as target for new unidirectional relation?

我有一个实体的表单,该表单在设计上可能是许多不同类型关系的目标;我们将其命名为 ManyTargetClass。目前这个 ManyTargetClass 是那些使用双向关系的关系的反面。我无法改变这个 class 是许多关系的目标的事实。但是我认为对所有可能类型的关系建立双向关系看起来不太好,因为它污染了我的 ManyTargetClass 有很多反向字段以及它们的吸气剂和设置器和所有这些。

(还是正常?)

我目前正在使用 traits 来缓解这种情况以减少视觉混乱,但我对此并不完全满意,尽管有重用这些 traits 的实际用例。

所以我认为让我的 RelatingClass1, RelatingClass2,... 声明与 ManyTargetClass 的单向 ManyToOne 关系会更好摆脱反面的复杂性。

但是当我想走单向路线时,我没能找到一种方法将其合并到我的表单工作流程中。请注意,RelatingClassX-classes 永远不会自行创建。 它们总是通过其他 classes 的表单中的嵌入表单创建的。这最终导致了我的实际问题。

我想创建一个 ManyTargetClass-实例,其中包含允许我创建 RelationClassX-实例的嵌入式表单,自动设置 ManyTargetClass-当前正在创建的实体作为由正在创建的RelatinClassX实体建立的单向关系的目标(最好不必解除潜在的现有非可空约束在 RelationgClassX 端的连接列定义上,如果这不可能,我可以取消此约束)。

这可能吗?如果是:是否可取,我该怎么做?

实体中的代码过多

ManyTargetClass 中创建许多 getter 和 setter 没有错。当我开始使用 Doctrine 时,我也有同样的想法。您可以将实体视为数据库中内容及其关系的文档。您想在将来检查您的实体并想了解它到底做了什么。

特质

特征也是如此。不要过度使用 traits 代码,并尽可能保持实体简单。实体也很大

考虑性能

您唯一关心的应该是性能。解决方案是单向关系或 fetch="EXTRA_LAZY".

更多信息:https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/tutorials/extra-lazy-associations.html

如何在使用单向关系时创建表单

使用 mapped=false 创建表单。您可以在 Controller 中将这些实体附加到父实体。

更多信息:https://symfony.com/doc/current/reference/forms/types/form.html#mapped

我不确定我是否明白你的意思。如果我的回答不合适,请提供一些表单和实体的代码示例。