У меня есть три объекта: User, Office и PhoneNumber. У пользователя много телефонных номеров, и у офиса тоже много телефонных номеров.
Проблема в том, как представить отношения этих сущностей в Doctrine 2.
Сначала я пытался использовать двунаправленные ассоциации «один ко многим» (Пользователь -> имеет много -> Номера телефонов) (Офис -> имеет много -> Номера телефонов), номер телефона имеет два поля сопоставления: одно для пользователя, а другое для офиса. . Это решение не работает, так как один из внешних ключей сопоставления не может быть нулевым.
Мой второй подход заключался в использовании двух сущностей и одного суперкласса для PhoneNumber. В суперклассе PhoneNumber определены все общие поля, кроме поля сопоставления. Сущности UserPhoneNumber и OfficePhoneNumber расширили сущность PhoneNumber и указали другое поле сопоставления и другую таблицу. (одна таблица для номеров OfficePhoneNumbers, другая для номеров UserPhoneNumbers)
Это решение на самом деле работает, но довольно уродливо иметь 3 класса для представления одной простой сущности.
Мой третий подход заключается в использовании однонаправленного отображения «один ко многим». Это устранит необходимость сопоставления поля для объекта PhoneNumber. Проблема в том, что когда я использую каскадное удаление для поля «многие ко многим», это нарушает ограничение целостности при удалении записей.
Когда я опускаю параметр каскадного удаления, после удаления пользователя или офиса номер телефона остается в базе данных (но запись в таблице сопоставления удаляется).
Каков наилучший способ справиться с этим типом ассоциации?
Спасибо
Notice: Undefined index: office_id in D:\www\App\vendor\doctrine\lib\Doctrine\ORM\Persisters\BasicEntityPersister.php line 1270
office_id отображается в поле Phone. - person Marian Galik   schedule 15.08.2011