【问题标题】:Doctrine: extending entity class学说:扩展实体类
【发布时间】:2012-02-15 03:34:04
【问题描述】:

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

【问题讨论】:

  • 为什么要扩展它?
  • 我想创建一个扩展基础的新类,例如 User extends UserBase。实际上现在所有基类都在 Entities/Base 中,所以我想在 Entities 中创建新类,它们将扩展 Entities/Base 类
  • @jaro 我想遵循 Doctrine 1.2 中的模式,我有基类和普通类,我扩展基类以便能够编写自己的自定义方法。问题是基类是自动生成的,我不想在每次更改模型中的某些内容时丢失代码。
  • 你能发布一个你想要实现的代码示例吗?
  • @jere 已经修复,而不是让 ClassModel 扩展 ClassBase 我已经让 ClassBase 扩展 ClassModel

标签: php orm doctrine


【解决方案1】:

这里是来自 Guilherme 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
}

【讨论】:

  • 你是先知;)谢谢
【解决方案2】:

Doctrine 2.X 实体作为 POPO(普通旧 PHP 对象)工作。 为了实现正确扩展,Doctrine 强制您使用 JPA 中的一个名为 Mapped Super Classes 的概念。 这个想法很简单。每当您想要拥有一个基类并希望您的实体从它扩展(我不是在谈论 DB 级别的继承)时,您所需要做的就是将您的 Base 类创建为 MappedSuperClass。

这里是一个例子:http://www.doctrine-project.org/docs/orm/2.1/en/reference/inheritance-mapping.html#mapped-superclasses

谢谢

【讨论】:

  • 我做了类似的事情,感谢您的努力,即使问题已经在几天前解决了,但无论如何我都会将您的答案标记为正确
  • 你可以发布解决方案,你知道的。这个社区的全部目的是互相帮助。
  • @NikolaPetkanski 你是 100% 正确的,你可以观察到,如果我找到解决方案,我会回答我自己的问题。
猜你喜欢
  • 1970-01-01
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多