Доктрина 2 связь наследования с разными классами - PullRequest
1 голос
/ 27 марта 2012

Я использую Doctrine 2 и наследование одной таблицы, моя верхняя иерархия сущностей:

JS_File --> [one to many] --> JS_File_Version

И тогда моя иерархия сущностей подкласса:

JS_Image (extends JS_File) --> [one to many] --> JS_Image_Version (extends JS_File_Version)

Отображение наследования отлично работает для JS_File и JS_Image, а сопоставление ассоциации отлично работает для JS_File -> JS_File_Version. Но когда дело доходит до сопоставления «версий» на JS_Image, я получаю:

'Property "versions" in "JS_Image" was already declared, but it must be declared only once'

Я понимаю, почему это так, ассоциация наследуется от JS_File, и я не могу перезаписать ее, но как мне добиться того, что я пытаюсь сделать? По сути, с наследованием, как я могу сказать Doctrine использовать другой targetEntity для ассоциации подклассов.

Ответы [ 2 ]

2 голосов
/ 28 марта 2012

возможно, вы ищете аннотацию @ MappedSuperclass для вашей сущности JS_Image.

Я думаю, что использовал ее некоторое время назад, но, согласно документам, она позволяет вам "определить информацию о состоянии и отображении, которая является общей для нескольких классов сущностей" , и она также может "появляться в середине иерархии наследования, сопоставленной в противном случае" .

ВозможноВы можете использовать это, чтобы сообщить Doctrine, что ваша сущность JS_Image является фактической «родительской» сущностью для ваших сущностей.У меня нет времени, чтобы проверить это сейчас, поэтому, пожалуйста, дайте мне знать, если это поможет.

1 голос
/ 29 марта 2012

Похоже, то, что я пытаюсь сделать, невозможно (имея JS_File и JS_Image в качестве конкретных объектов). Вместо этого я последовал совету кого-то из списка рассылки doctrine-user:

Способ, которым я решил это, состоял в том, чтобы использовать абстрактный базовый класс и затем определить фактические отображения на подклассах. Например, вы можете сделать что-то вроде:

JS_AbstractFile с подклассами: JS_File и JS_Image JS_AbstractVersion с подклассами: JS_FileVersion и JS_ImageVersion

AbstractFile и AbstractVersion могут определять свойство (и методы получения / установки), но вы не должны определять какую-либо информацию отображения для поля. Затем в своем подклассе вы переопределяете свойство вместе с информацией о отображении (по крайней мере, так я это сделал, поскольку использовал аннотации)

http://groups.google.com/group/doctrine-user/msg/243f355191d3a512

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...