Ассоциация с наследственным наследием в доктрине

У меня проблемы с привязкой объекта к другому с помощью OneToOne Association, где один объект является экземпляром подкласса наследования одной таблицы.

У меня есть один суперкласс, давайте назовем его животное, и некоторые подклассы, например Котопес.
Животное содержит object_id колонка который указывает на идентификатор владельца и колонка дискриминатора type который указывает на подкласс (кошка или собака).

У меня также есть различные сущности, которые имеют непосредственные связи с одним из подклассов.

  • CatLady 1 <-> 1 Кошка (Хорошо, плохой пример. Женщина-кошка должна иметь больше, чем одну кошку)
  • Хозяин собаки 1 <-> 1 Собака

Код:

/**
* Animal
*
* @ORM\Table("animal")
* @ORM\Entity()
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type", type="integer")
* @ORM\DiscriminatorMap({0 = "Cat", 1 = "Dog"})
*/
abstract class Animal {
/**
* @var integer
* @ORM\Id()
* @ORM\Column(name="id", type="integer")
*/
protected $id;

/**
* @var integer
*
* @ORM\Column(name="object_id", type="integer")
*/
protected $object_id;
}

/**
* Cat
*
* @ORM\Entity()
*/
class Cat extends Animal {}

/**
* CatLady
* @ORM\Entity()
*/
class CatLady {
/**
* @var Cat
*
* @ORM\OneToOne(targetEntity="\Path\To\Entity\Cat")
* @ORM\JoinColumn(name="id", referencedColumnName="object_id", nullable=true))
*/
private $cat;
}

Проблема:
До обновления Doctrine от 2.3 до 2.4.5 это работало, но после того, как я всегда получал Primary Key Value is Missing Exception,
Сейчас я пытаюсь выяснить, как создать эту связь между CatLady и Cat. Ассоциация может быть однонаправленной.

Я думаю, проблема в том, что object_id это не основной ключ — что невозможно, потому что оно не уникально (только object_id и type будут уникальными, но дискриминатор не может быть частью первичного ключа …).

Какие-либо решения?

Обновить:
Может быть, еще немного информации поможет:
Как уже упоминалось, я использую Doctrine 2.4.5 и Symfony2.2. Последняя рабочая версия была с Doctrine 2.3 и Symfony2.1.
Колонка object_id не является ни первичным ключом, ни внешним ключом, потому что он не является простым и указывает на разные классы / таблицы. Возможно, это не лучший дизайн базы данных, но я не могу его изменить.

Table: Animal
+----------------+---------+------+-----+---------+----------------+
| Field          | Type    | Null | Key | Default | Extra          |
+----------------+---------+------+-----+---------+----------------+
| id             | int(11) | NO   | PRI | NULL    | auto_increment |
| object_id      | int(11) | NO   | MUL | NULL    |                |
| object_type    | int(11) | NO   |     | NULL    |                |
+----------------+---------+------+-----+---------+----------------+

В таблицах для CatLady и DogOwner нет столбца, указывающего на Animal.

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]