php 原则:扩展实体类

mtb9vblg  于 2023-06-21  发布在  PHP
关注(0)|答案(2)|浏览(130)

我想扩展Entity\Base类,在Doctrine 2.1中如何实现?我的研究表明,每当有人遇到这样做的问题时,他就会切换到Doctrine1.2:)n我正在使用yaml配置

yi0zb3m4

yi0zb3m41#

Doctrine 2.X实体作为POPO(Plain Old PHP Object)工作。为了实现正确的扩展,Doctrine强制您使用JPA中的一个概念,称为Map超类。这个想法很简单。无论何时,只要你想拥有一个基类,并希望你的实体从它扩展(我不是在谈论DB级别的继承),你所需要做的就是将基类创建为MappedSuperClass。
下面是一个例子:https://www.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
谢谢

pkmbmrz7

pkmbmrz72#

这里的解决方案从吉列尔梅布兰科链接。我喜欢有一个张贴的解决方案,而不是一个链接,最终可能不再工作在未来:

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

相关问题