【问题标题】:Use Base Class on Doctrine 2 Entities?在 Doctrine 2 实体上使用基类?
【发布时间】:2014-02-10 18:55:23
【问题描述】:

我是 Doctrine 的新手(以及一般的 ORM)。我已经生成了一些以我的数据库为模型的实体,并且效果很好。但是,我想知道是否有一种方法可以使用具有共享功能的基类来扩展实体类。例如,我可以将 getter 和 setter 的魔术方法放在基类中。 Doctrine 2 可以做到这一点吗?

例如:

/**
 * Country
 *
 * @Table(name="country", uniqueConstraints={@UniqueConstraint(name="country_id", columns={"country_id"})})
 * @Entity
 */
class Country extends MyBaseClass
{   
    /**
     * @var integer
     *
     * @Column(name="country_id", type="integer")
     * @Id
     * @GeneratedValue
     */
    protected $id;

    /**
     * @var string
     *
     * @Column(name="code", type="string", length=2, nullable=true)
     */
    protected $code;

    /**
     * @var string
     *
     * @Column(name="name", type="string", length=75, nullable=true)
     */
    protected $name;
}

class MyBaseClass {
    public function doSomething($var) {
        return $this->$var;
    }
}

【问题讨论】:

  • 当然。 Doctrine 2 实体只是普通的旧 php 对象。向外延伸。虽然我在使用 __get 时会小心一点,因为它可能会破坏延迟加载。

标签: orm doctrine-orm doctrine


【解决方案1】:

实体是通用类,因此您可以轻松扩展一些基类。 例如,您可以在 FOSUserBundle 中查看如何使用此方法的示例。基类和接口放在model文件夹下。

共享功能的另一种方式是traits。您可以从 KnpLabs here 了解一些一般的 Doctrine 2 行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    • 1970-01-01
    相关资源
    最近更新 更多