在我的Symfony应用程序中,我有以下实体:
- 客户
- 联系(ManyToMany与客户)
我还创建了一个Note实体(带附件,但这是一个简单的1-N与Note的关系),我想与Customer和Contact联系。但问题是,如何?
在Customer / Note和Contact / Note之间创建标准的OneToMany关系。
Note实体有两列:customer_id
和contact_id
这肯定会正常工作,但是,总有一列具有NULL
值。感觉就像糟糕的设计。
ManyToMany或OneToMany带有额外的连接表 可以拥有Notes的每个实体都在创建一个连接表:customer_notes,contact_notes等。
优点:所有字段都填充数据
缺点:ManyToMany感觉不是正确的解决方案:要让客户与Note相关,我必须使用foreach
或$customers[0]
,因为Doctrine会返回一组客户,这些客户应该只返回一个客户当然。具有额外连接的OneToMany不是双向的,但我稍后会再回来。
映射的超类,例如Link 1 entity with many others kind of entities 我可以使用$ notes属性创建一个超类,并使用此超类扩展Customer或Contact实体。但在阅读上述相关问题后,我怀疑这是否是最佳解决方案。 Many-To-One with multiple target entities中的例子是“简单”:水果和蔬菜都是食物的类型。但客户和联系人没有共同点,只是他们都可以有笔记。
最重要的方向是客户 - >笔记。所有注释必须显示在Customer/show.html.twig
页面或Contact/show.html.twig
页面上。另一个方向对我的面包屑很好(见其他说明)。
如果我创建/ customer / {customer_id} / note / {note_id}等路线以显示客户的备注,我可以使用URL参数$ customer_id检索Customer对象。因此,我不需要双向关系,因为我可以通过URL检索客户。但是,对于我需要复制代码的每个实体。在Note上为CRUD操作提供可共享代码会很好,这适用于Note所属的实体。
正如您所看到的,我的问题有很多可能性。我对Symfony比较陌生,我想以“专业”的方式解决它,我希望得到一些关于如何解决这个问题的指导。
为每种Note(CustomerNote,ContactNote)创建一个Note实体。这只是一个简单的OneToMany关系。然而,很多(几乎)重复的代码,使用我正在寻找的解决方案可以避免这种代码。
我不反对这个解决方案,但感觉存在比这更好的解决方案,当CTRL-C和CTRL-V很多代码时我觉得很愚蠢;)