2012-12-02 75 views
0

我有抽象實體(應用程序 - 基核心):如何設置固定實體關係在學說2

namespace App\Bundles\AppBundle\Entity; 

abstract class App extends ContainerAware implements AppInterface 
{ 
// ..... 
} 

和自實體:

namespace AppRus\Bundles\AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM, 
    App\Bundles\AppBundle\Entity\App as BaseApp; 

/** 
* App 
* 
* @ORM\Table(name="apps") 
* @ORM\Entity(repositoryClass="AppRus\Bundles\AppBundle\Entity\AppRepository") 
*/ 
class App extends BaseApp 
{ 
    // .... 
} 

和實體控制的修改:

namespace App\Bundles\AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* AppHistory 
* 
* @ORM\Table(name="apps_history") 
* @ORM\Entity(repositoryClass="App\Bundles\AppBundle\Entity\AppHistoryRepository") 
*/ 
class AppHistory 
{ 
    /** 
    * @var integer 
    * 
    * @ORM\ManyToOne(targetEntity="App\Bundles\AppBundle\Entity\App") 
    * @ORM\JoinColumn(name="app_apple_id", referencedColumnName="apple_id") 
    */ 
    private $app; 
} 

我無法創建關係AppHistory#app到App#apple_id

當我設置實體抽象類應用程序,然後學說創建新表「應用程序」 當我設置MappedSuperClass抽象類的應用程序,我有錯誤:http://docs.doctrine-project.org/en/latest/reference/inheritance-mapping.html#mapped-superclasses

如何從AppHistory創建相對於抽象的核心應用?

+0

可以嘗試更換目標實體學說事件偵聽器(loadClassMetadata),但在文件 - 屬性$ associationMappings是公開的,只讀的 – ZhukV

回答

0

我的理解是,這是不可能的。我認爲你的做法是錯誤的,至少對於Doctrine2來說。

首先,從Doctrine2文檔你提到:

A mapped superclass is an abstract or concrete class that provides persistent entity state and mapping information for its subclasses, but which is not itself an entity.

不能創建關係的東西,不是一個實體!

爲了解決您的直接問題(〜版本控制〜在教條),請檢查出EntityAudit on Github

+0

這是很好的實體審計,但我想我創建邏輯產生的歷史更新。 – ZhukV

+0

編輯關聯中的targetEntity(loadClassMetadata)是可行的。 – ZhukV

+0

@朱克,我只是不明白你在做什麼。你可以編輯你的問題來解釋更多?也許鏈接到您嘗試實施的設計模式。 – jmlnik