Модель проектного объекта для управления несколькими двунаправленными отношениями

Я пытаюсь найти лучший способ разработки отношений между объектами из моей модели. Я попытаюсь объяснить это ясно.

Представьте себе следующие объекты Doctrine2:

class ImageHistory
{
    /**
     * @var Image
     */
    protected $current;

    /**
     * @var \Doctrine\Common\Collections\Collection
     */
    protected $old;
}

class Dog
{
    protected $name;

    /**
     * @var ImageHistory
     */
    protected $imageHistory;
}

class Cat
{
    protected $name;

    /**
     * @var ImageHistory
     */
    protected $imageHistory;
}

Я хотел бы установить две взаимно-двунаправленные отношения доктрины, где " Cat и Dog являются собственными сторонами отношений. Оба класса Cat и Dog имеют такую конфигурацию сущности:

manyToOne:
    imageHistory:
        targetEntity: ImageHistory
        joinColumn:
            name: image_history_id
            referencedColumnName: id

Как представить другую сторону отношения?

oneToMany:
    owner:
        targetEntity: <What can I write here?>
        mappedBy: imageHistory

Я представляю решение, в котором Cat и Dog наследуют класс сущностей Animal, поэтому я могу переместить отношение ManyToOne в класс Animal и поместить Animal как targetEntity отношения OneToMany. Но проблема возникает, если у меня есть новый SoundHistory и: Cat, Dog и новые классы Car and Boat должны иметь отношение к нему.

A не может просто добавить SoundHistory как отношение oneToMany к классу Animal потому что Car and Boat не будет унаследовать его. Поэтому я все еще не могу заполнить targetEntity моего отношения OneToMany в ImageHistory.

Каков наилучший способ создания модели сущности в этом случае?

Ответ 1

Связь "много-к-одному" является однонаправленной, поэтому вы не можете представлять другую сторону.

Кроме того, вам следует подумать о создании супер-объекта, если вы действительно хотите сохранить Собаки и Кошки в одной таблице.