2014-02-20 78 views
0

我已經創建了共享相同的屬性幾個實體基類,我認爲這是一個很好的用例爲@MappedSuperclass@MappedSuperclass VS純抽象類

use Doctrine\ORM\Mapping as ORM; 

/** 
* @ORM\MappedSuperclass 
*/ 
abstract class Invoiceable 
{ 
    /** 
    * @ORM\ManyToOne(targetEntity="Invoice") 
    * @ORM\JoinColumn(name="invoiceId", referencedColumnName="id") 
    * 
    * @var Invoice|null 
    */ 
    protected $invoice = null; 

    /** 
    * @ORM\ManyToOne(targetEntity="CreditNote") 
    * @ORM\JoinColumn(name="creditNoteId", referencedColumnName="id") 
    * 
    * @var CreditNote|null 
    */ 
    protected $creditNote = null; 
} 

不過,我很驚訝當刪除@MappedSuperclass註釋時,它仍然按預期工作。

那麼超類的@MappedSuperclass的目的是什麼呢?

回答

0

禮貌Marco Pivetta on the doctrine-user mailing list

這真的只是基於註釋驅動程序是如何工作的一個幸運的情況下 - 同意,這是令人困惑的。它的工作原理是因爲你的房產是protected

我建議你嘗試一下XML或YAML映射 - 你會看到它是如何崩潰嚴重。

您仍然應該將其定義爲映射超類。