Question

I have three entities: User, Office and PhoneNumber. The user has many phone numbers, and the office has many phone numbers too.

The problem is how to represent these entities relations in Doctrine 2.

  1. At first I tried to use bi-directional one-to-many associations (User -> has many -> PhoneNumbers) (Office -> has many -> PhoneNumbers), the PhoneNumber has two mapping fields, one for User and anotherone for Office. This solution doesn't work since one of the mapping foreign keys couldn't be null.

  2. My second approach was to use two entities and one superclass for PhoneNumber. The PhoneNumber superclass has defined all common fields except the mapping field. Entities UserPhoneNumber and OfficePhoneNumber extended the PhoneNumber entity and specified the different mapping field and different table. (one table for OfficePhoneNumbers, anotherone for UserPhoneNumbers)

    This solution actually works, but it is quite ugly to have 3 classes to represent one simple entity.

  3. My third approach is to use uni-directional one-to-many mapping. This will eliminate the need of mapping field for the PhoneNumber entity. The problem is that when I use cascade remove for the many-to-many field, it violates the integrity constraint when deleting records.

    When I omit the cascade remove option, after removing User or Office, the PhoneNumber remains in the Database (but the record in mapping table is removed).

What is the best way to handle this type of association?

Thanks

Was it helpful?

Solution

I finally solve the problem connected with (probably the nicest) solution 1). The problem was in misunderstanding of mappedBy attribute which should specify the entity field, not the database field.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top