Это конфигурация, которую я хочу иметь:
«Учетная запись» сущности с наследованием 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. Любая идея о том, что не так? Благодаря!
Вам нужен случай для вашего класса «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 {}