Doctrine Inheritance – Single_Table inheritade from Join table

Это конфигурация, которую я хочу иметь:

«Учетная запись» сущности с наследованием JOINED двум другим объектам: «Автор» и «AccountBackend».

Затем я хотел бы, чтобы «AccountBackend» имел наследование SINGLE_TABLE с двумя другими объектами: «Администратор» и «FeaturedAuthor». Именно так я определил их:

Account.php

/** * @Entity (repositoryClass="Repositories\Account") * @Table(name="accounts") * @InheritanceType("JOINED") * @DiscriminatorColumn(name="discr", type="integer") * @DiscriminatorMap({"1"="Author","2"="AccountBackend"}) * @HasLifecycleCallbacks */ class Account { 

Curator.php

 /** * @Entity * @Table(name="accounts_author") */ class Author extends Account { 

AccountBackend.php

 /** * @Entity (repositoryClass="Repositories\AccountBackend") * @Table(name="accounts_backend") * @InheritanceType("SINGLE_TABLE") * @DiscriminatorColumn(name="discr", type="integer") * @DiscriminatorMap({"1"="FeaturedAuthor","2"="Administrator"}) * @HasLifecycleCallbacks */ class AccountBackend extends Account { 

FeaturedAuthor.php

 /** * @Entity */ class FeaturedAuthor extends AccountBackend { 

Administrator.php

 /** * @Entity */ class Administrator extends AccountBackend { 

Когда я их определяю, когда я пытаюсь выполнить обновление через CLI, он говорит:

«Entity» Entities \ AccountBackend »должен быть частью карты дискриминатора« Entities \ Account », которая должна быть правильно отображена в иерархии наследования. В качестве альтернативы вы можете сделать« Entities \ AccountBackend »абстрактным классом, чтобы исключить это исключение».

Я не вижу ничего плохого в том, как я их определял, это первый случай, когда я пытаюсь наследовать уже унаследованную Entity. Любая идея о том, что не так? Благодаря!

Solutions Collecting From Web of "Doctrine Inheritance – Single_Table inheritade from Join table"

Вам нужен случай для вашего класса «AccountBackend» в вашей @DiscriminatorMap

например

 @DiscriminatorMap({"1"="FeaturedAuthor","2"="Administrator", "3"="AccountBackend"}) 

Как объясняется в документации

Все классы объектов, которые являются частью иерархии сопоставленных объектов ( включая самый верхний класс), должны быть указаны в @DiscriminatorMap. В случае, указанном выше класса Person.

В случае, если вы пришли сюда и возникли проблемы с наследованием SINGLE_TABLE – возможно, проблема возникает из-за того, что ваш класс дискриминатора не является абстрактным.

Мой пример (решение)

 /** * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="entity", type="string") * @ORM\DiscriminatorMap({"product" = "ProductReview", "seller" = "SellerReview"}) * @ORM\Table(name="reviews") */ abstract class Review {} class ProductReview extends Review {} class SellerReview extends Review {}