我已经为共享相同属性的多个实体创建了一个基类,我认为这对于@MappedSuperclass
来说是一个很好的用例:
use DoctrineORMMapping as ORM;
/**
* @ORMMappedSuperclass
*/
abstract class Invoiceable
{
/**
* @ORMManyToOne(targetEntity="Invoice")
* @ORMJoinColumn(name="invoiceId", referencedColumnName="id")
*
* @var Invoice|null
*/
protected $invoice = null;
/**
* @ORMManyToOne(targetEntity="CreditNote")
* @ORMJoinColumn(name="creditNoteId", referencedColumnName="id")
*
* @var CreditNote|null
*/
protected $creditNote = null;
}
但是,令我惊讶的是,在删除@MappedSuperclass
注释时,它仍然按预期工作。
那么@MappedSuperclass
超类的目的是什么,如果它没有工作呢?
由 Marco Pivetta 在 doctrine-user 邮件列表中提供:
这实际上只是一个基于注释驱动程序工作方式的幸运案例 - 同意,这令人困惑。它之所以有效,是因为您的属性
protected
.我建议您尝试使用XML或YAML映射进行相同的操作-您将看到它如何严重崩溃。
您仍应将其定义为映射的超类。