我有三个实体:User,Office和PhoneNumber。用户有很多电话号码,办公室也有很多电话号码。Doctrine 2中3个实体之间的一对多关系
的问题是如何在教义代表这些实体的关系2.
起初,我试图用双向一个一对多的关联 (用户 - >有很多 - > PHONENUMBERS) (Office - >有很多 - > PhoneNumbers),PhoneNumber有两个映射字段,一个用于用户 ,另一个用于Office。由于 之一,映射外键不能为空,所以此解决方案不起作用。
我的第二种方法是使用PhoneNumber的两个实体和一个超类。 PhoneNumber超类定义了除映射字段以外的所有常用字段。实体UserPhoneNumber和 OfficePhoneNumber扩展PhoneNumber实体并指定 不同的映射字段和不同的表。 (一个用于OfficePhoneNumbers的桌子,另一个用于用户电话号码)
该解决方案实际上可行,但是用类来表示一个简单的实体是相当丑陋的。
我的第三种方法是使用单向一对多映射。这将消除PhoneNumber实体映射字段的需要。问题是,当我使用级联移除多对多字段时,删除记录时违反了完整性约束。
当我省略级联删除选项时,在删除用户或办公室后,PhoneNumber将保留在数据库中(但映射表中的记录已删除)。
处理这种关联的最好方法是什么?
由于
我已经完成解决方案1)成功之前。你能否详细说明你的空限制?另外,每个数字都是唯一的吗?这也起着一部分作用,即电话号码既可以是用户也可以是办公室? – Tjorriemorrie
我不记得确切的错误信息,因为我将我的代码重写为3)。我将再次尝试解决方案1)并让您知道确切的错误消息。是的,每个号码都是唯一的,用户和办公室不能共享相同的号码。 –
刚刚尝试过。我创建了一个有两个电话号码的办公室,在尝试取回或删除它后,我收到了以下消息:'注意:未定义索引:D:\ www \ App \ vendor \ doctrine \ lib \ Doctrine \ ORM \ Persisters \ BasicEntityPersister.php行1270' office_id被映射到Phone的字段。 –