Symfony2 абстрактный класс множественного наследования с Doctrine

Я получил следующую схему UML:
введите описание изображения здесь

По сути, это начало системы таксономии, некоторые из которых являются вложенными, а некоторые нет.
Я начал пытаться сделать 2 слоя абстрактных классов (Taxonomy и OfferCategory), потому что ни один из них не может быть использован в качестве конечного объекта. Я использовал MappedSuperClass, но я получил следующую ошибку:

[Doctrine\ORM\ORMException]
Column name `id` referenced for relation from LCH\CatalogBundle\Entity\HomeOfferCategory towards LCH\CatalogBund       le\Entity\OfferCategory does not exist.

Моё поле первичного ключа — id …

В более общем плане, какова лучшая реализация моей схемы, представленной в Doctrine?

Спасибо !

РЕДАКТИРОВАТЬ : Я попытался переставить всех членов OfferCategory непосредственно в моем классе RootOfferCategory. Изменяя th targetENtity с обеих сторон, ошибки больше нет.
То есть вы не можете самостоятельно ссылаться на сопоставленный суперкласс?

Таксономия:

/**
* Class Taxonomy
* @package LCH\CatalogBundle\Entity
* @ORM\MappedSuperclass
*/
abstract class Taxonomy implements TaxonomyInterface
{
/**
* @var integer
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;

/**
* @var string the category name
* @ORM\Column(name="name", type="string", length=255)
*/
protected $name;
}

** ПредложениеКатегория: **

/**
* OfferCategory
* @ORM\MappedSuperclass
*/
abstract class OfferCategory extends Taxonomy
{
/**
* @var OfferCategory the category parent
* @ORM\ManyToOne(targetEntity="LCH\CatalogBundle\Entity\OfferCategory",inversedBy="children", cascade={"persist"})
* @ORM\JoinColumn(name="parent_id", referenceColumnName="id")
*/
protected $parent;
/**
* @var OfferCategory the children categories
*       @ORM\OneToMany(targetEntity="LCH\CatalogBundle\Entity\OfferCategory",mappedBy="parent", cascade={"persist"})
*/
protected $children;
}

RootOfferCategory

/**
* RootOfferCategory
* Represents one root top category
* @ORM\Table()
*      @ORM\Entity(repositoryClass="LCH\CatalogBundle\Entity\RootOfferCategoryRepository")
*/
class RootOfferCategory extends OfferCategory
{

}

4

Решение

Извините, что приехал после войны.

От эта часть Доктрина документации:

Сопоставленный суперкласс не может быть сущностью, он не может запрашивать, и постоянные отношения, определенные сопоставленным суперклассом, должны быть однонаправленными (только со стороной-владельцем).

Это означает, что связи «один ко многим» вообще не возможны для сопоставленного суперкласса.
Кроме того, ассоциации «многие ко многим» возможны только в том случае, если сопоставленный суперкласс используется только в одной сущности. В настоящий момент.

Для дальнейшей поддержки наследования необходимо использовать функции наследования отдельных или объединенных таблиц.

0

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

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