在Doctrine 2实体上使用基类?

时间:2014-02-10 18:55:24

标签: orm doctrine-orm doctrine

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

1 个答案:

答案 0 :(得分:1)

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

分享功能的另一种方法是traits。您可以从KnpLabs here查看一些一般的Doctrine 2行为。