代码之家  ›  专栏  ›  技术社区  ›  BenMorel Manish Pradhan

@MappedSuperclass与普通抽象类

  •  1
  • BenMorel Manish Pradhan  · 技术社区  · 12 年前

    我已经为几个共享相同财产的实体创建了基类,我认为这是一个很好的用例 @MappedSuperclass :

    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;
    }
    

    然而,当我删除 @映射超级类 注释,它仍按预期工作。

    目的是什么 @映射超级类 那么,如果没有超类,它会工作吗?

    1 回复  |  直到 12 年前
        1
  •  2
  •   Community Mohan Dere    6 年前

    礼貌 Marco Pivetta on the doctrine-user mailing list :

    基于注释驱动程序的工作方式,这真的是一个幸运的案例——同意,这令人困惑。因为你的财产 protected .

    我建议您对XML或YAML映射进行同样的尝试——您将看到它是如何崩溃的。

    您仍然应该将其定义为映射的超类。