2012-01-20 206 views
10

我想扩展Entity \ Base类,如何在Doctrine 2.1中做到这一点?我的研究表明,每当有人遇到这样的问题,他切换到Doctrine 1.2:)n我使用yaml配置学说:扩展实体类

+0

为什么要扩展它? – jere

+0

我想创建一个扩展基类的新类,例如User extends UserBase。其实现在所有的基类是在实体/基础,所以我想在实体创建新类,它们将扩展实体/基类 – mkk

+0

@jaro我想从学说1.2我有基类和普通类遵循的模式,我扩展基类以便能够编写我自己的自定义方法。问题是基类是自动生成的,我不希望每次更改模型中的某些内容时都会丢失代码。 – mkk

回答

16

原则2.X实体作为POPO(Plain Old PHP Objects)工作。 为了实现正确的扩展,Doctrine强制您使用来自JPA的称为Mapped Super Classes的概念。 这个想法很简单。无论何时你想拥有一个基类并希望你的实体扩展它(我不是在谈DB级别的继承),只需要将你的Base类创建为MappedSuperClass即可。

下面是一个例子:http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses

由于

+0

我已经做了类似的事情,感谢的努力,尽管这个问题已经解决了前两天我将标志着你的答案正确反正 – mkk

+2

你知道的,你可以发布解决方案。这个社区的全部目的是帮助彼此。 –

+0

@NikolaPetkanski你是100%正确的,你可以看到,我不回答我的问题,如果我找到解决方案。 – mkk

2

在这里从吉尔赫尔梅Blanco的链接的解决方案。我喜欢有一个发布的解决方案,而不是最终可能不再工作的链接:

<?php 
/** @MappedSuperclass */ 
class MappedSuperclassBase 
{ 
    /** @Column(type="integer") */ 
    protected $mapped1; 

    /** @Column(type="string") */ 
    protected $mapped2; 

    /** 
    * @OneToOne(targetEntity="MappedSuperclassRelated1") 
    * @JoinColumn(name="related1_id", referencedColumnName="id") 
    */ 
    protected $mappedRelated1; 

    // ... more fields and methods 
} 

/** @Entity */ 
class EntitySubClass extends MappedSuperclassBase 
{ 
    /** @Id @Column(type="integer") */ 
    private $id; 

    /** @Column(type="string") */ 
    private $name; 

    // ... more fields and methods 
}