我有三个实体:用户、办公室和电话号码。用户有很多电话号码,办公室也有很多电话号码。
问题是如何在 Doctrine 2 中表示这些实体关系。
起初我尝试使用双向一对多关联(用户 -> 有很多 -> 电话号码)(办公室 -> 有很多 -> 电话号码),电话号码有两个映射字段,一个用于用户,另一个用于办公室. 此解决方案不起作用,因为其中一个映射外键不能为空。
我的第二种方法是对 PhoneNumber 使用两个实体和一个超类。PhoneNumber 超类定义了除映射字段外的所有公共字段。实体 UserPhoneNumber 和 OfficePhoneNumber 扩展了 PhoneNumber 实体并指定了不同的映射字段和不同的表。(OfficePhoneNumbers 一个表,UserPhoneNumbers 另一个表)
这个解决方案确实有效,但是用 3 个类来表示一个简单的实体是相当难看的。
我的第三种方法是使用单向一对多映射。这将消除 PhoneNumber 实体的映射字段的需要。问题是当我对多对多字段使用级联删除时,它在删除记录时违反了完整性约束。
当我省略级联删除选项时,删除用户或办公室后,电话号码仍保留在数据库中(但映射表中的记录被删除)。
处理这种关联的最佳方式是什么?
谢谢