1

我有三个实体:用户、办公室和电话号码。用户有很多电话号码,办公室也有很多电话号码。

问题是如何在 Doctrine 2 中表示这些实体关系。

  1. 起初我尝试使用双向一对多关联(用户 -> 有很多 -> 电话号码)(办公室 -> 有很多 -> 电话号码),电话号码有两个映射字段,一个用于用户,另一个用于办公室. 此解决方案不起作用,因为其中一个映射外键不能为空。

  2. 我的第二种方法是对 PhoneNumber 使用两个实体和一个超类。PhoneNumber 超类定义了除映射字段外的所有公共字段。实体 UserPhoneNumber 和 OfficePhoneNumber 扩展了 PhoneNumber 实体并指定了不同的映射字段和不同的表。(OfficePhoneNumbers 一个表,UserPhoneNumbers 另一个表)

    这个解决方案确实有效,但是用 3 个类来表示一个简单的实体是相当难看的。

  3. 我的第三种方法是使用单向一对多映射。这将消除 PhoneNumber 实体的映射字段的需要。问题是当我对多对多字段使用级联删除时,它在删除记录时违反了完整性约束。

    当我省略级联删除选项时,删除用户或办公室后,电话号码仍保留在数据库中(但映射表中的记录被删除)。

处理这种关联的最佳方式是什么?

谢谢

4

1 回答 1

0

我终于解决了与(可能是最好的)解决方案 1)相关的问题。问题在于对应该指定实体字段而不是数据库字段的 mappedBy 属性的误解。

于 2011-08-15T14:08:13.547 回答