2014-04-01 48 views
3

這SINGLE_TABLE inheritade是我想擁有的配置:學說傳承 - 從連接表

一個實體「賬戶」具有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做一個更新,它說

「實體‘實體\ AccountBackend’必須的一部分鑑別器 'Entities \ Account'的映射將被正確映射到繼承 層次中。或者,也可以讓「實體\ AccountBackend」的 抽象類,以避免發生的歷史此異常。」

我看不出有什麼毛病我定義他們的方式,這是我第一次嘗試有繼承上已經繼承實體。的什麼錯?謝謝!

回答

7

你在你的@DiscriminatorMap需要爲你的「AccountBackend」級的情況下,任何想法

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

Documentation

應在@DiscriminatorMap被指定的所有實體類,是映射的實體層次結構的一部分(包括最頂層類)解釋。在包含Person類的情況下。

+0

您好。我在我的Account.php實體 – raygo

+0

有,但您的帳戶實體不是SINGLE_TABLE繼承的一部分。您需要將AccountBackend添加到您的SINGLE_TABLE的DiscriminatorMap – Peekmo

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 {}