如何使用Doctrine在Symfony中的两个实体之间共享类似的属性?

时间:2016-05-16 15:47:42

标签: symfony doctrine-orm

我有两个非常相似的学说实体,但不一样。

我正在考虑创建一个接口或使用抽象方法在它们之间共享重复的代码,但不确定这是否是最佳实践。

我有两个独立的实体,其中有许多非常相似的setter和getter。

在这种情况下,哪种方法可以在实体之间共享代码?

2 个答案:

答案 0 :(得分:2)

您可以使用Embeddables

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/tutorials/embeddables.html

从学说示例中,我们有UserAddress

Address实体的embedded也是Company

/** @Entity */
class User
{
    // Here we embed our Address entity

    /** @Embedded(class = "Address") */
    private $address;
}

/** @Entity */
class Company
{
    /** @Embedded(class = "Address") */
    private $address;
}

/** @Embeddable */
class Address
{
    // Our `shared` entity

    /** @Column(type = "string") */
    private $street;

    /** @Column(type = "string") */
    private $postalCode;

    /** @Column(type = "string") */
    private $city;

    /** @Column(type = "string") */
    private $country;
}

阅读文档了解更多信息:

http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/tutorials/embeddables.html

答案 1 :(得分:0)

如果您的实体属于同一个域,我建议您考虑mapped superclasses。 如果不是PHP Traits也可能是一个不错的选择