2012-12-02 44 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