2012-01-20 209 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 
}