Doctrine 2中3个实体之间的一对多关系

时间:2011-08-13 14:10:22

标签: doctrine-orm symfony model-associations

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

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

  1. 起初我尝试使用双向一对多关联 (用户 - >有很多 - > PhoneNumbers)(Office - >有很多 - > PhoneNumbers),PhoneNumber有两个映射字段,一个用于User 和另一个办公室。这个解决方案不起作用 映射外键不能为空。

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

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

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

    当我省略cascade remove选项时,删除User或Office后,PhoneNumber仍保留在数据库中(但删除了映射表中的记录)。

  4. 处理此类关联的最佳方法是什么?

    由于

1 个答案:

答案 0 :(得分:0)

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