这是我想要的配置:
一个实体“帐户”,其中包含对两个其他实体的JOINED继承:“作者”和“AccountBackend”。
然后我希望“AccountBackend”与其他两个实体具有SINGLE_TABLE继承:“Administrator”和“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进行更新时,它说
“实体'实体\ AccountBackend'必须是鉴别器的一部分 “实体\帐户”的映射要在继承中正确映射 层次结构。或者,您可以将'Entities \ AccountBackend'设为一个 抽象类,以避免发生此异常。“
我没有看到我定义它们的方式有任何问题,这是我第一次尝试在已经继承的Entity上继承。什么意思错了?谢谢!
答案 0 :(得分:7)
您的" AccountBackend"需要一个案例。 @DiscriminatorMap中的类
例如
@DiscriminatorMap({"1"="FeaturedAuthor","2"="Administrator", "3"="AccountBackend"})
中解释
应该在@DiscriminatorMap中指定属于映射实体层次结构(包括最顶层类)的所有实体类。在上面包括Person类的情况下。
答案 1 :(得分:4)
如果你来到这里& 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 {}