Symfony / Doctrine:Traits and Annotations

时间:2016-03-25 16:33:34

标签: annotations doctrine traits

我有一个实体Test,它将从特征中获取其属性(和基本方法):

class Test {
   use Trait_title;
}

trait Trait_title{
    /**
     * @ORM\Column(type="string", length=255, nullable=false)
     */
    private $title;
}

这是正常的。但是当我尝试将注释放在Test Class语句前面的use时,部分或完整,当我尝试更新模式时,symfony会忽略它们:

class Test {
    /**
     * @ORM\Column(type="string", length=255, nullable=false) //will be ignored...
     */
   use Trait_title;
}

trait Trait_title {
    private $title;
}

这样做的目的是将教条注释的默认值移动到特征中,但也允许为每个实体设置一些自定义注释,如nullable

1 个答案:

答案 0 :(得分:2)

您正在寻找的是地图覆盖。

您应该查看Doctrine官方文档来实现此目的: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/override-field-association-mappings-in-subclasses.html

还有一个完全针对您的用例的示例,它会覆盖特征映射信息。

  

有时候,覆盖的映射来自使用特征的实体,其中特征具有映射元数据。本教程将介绍如何覆盖映射元数据,特别是属性和关联元数据。

第二种方法是通过重新定义映射信息来覆盖trait属性。 有关此解决方案的详细信息,请参阅此答案: https://stackoverflow.com/a/11939306/4829152