我有一个实体Test
,它将从traits中获取其属性(和基本方法):
class Test {
use Trait_title;
}
trait Trait_title{
/**
* @ORM\Column(type="string", length=255, nullable=false)
*/
private $title;
}
这是正确的。但是,当我尝试将注释放在测试类
的
use
语句前面时,当我尝试更新模式时,symfony忽略了部分注释或完整注释:
class Test {
/**
* @ORM\Column(type="string", length=255, nullable=false) //will be ignored...
*/
use Trait_title;
}
trait Trait_title {
private $title;
}
这样做的目的是将条令注释的默认值移动到trait中,但也允许设置一些自定义注释,如每个实体的nullable
。
您要查找的是映射覆盖。
你应该看看学说官方留档来实现这一点:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/override-field-association-mappings-in-subclasses.html
还有一个完全适合您的用例的示例,覆盖Trait映射信息。
有时,要重写的映射来自使用特征的实体,其中特征具有映射元数据。本教程解释如何覆盖映射元数据,特别是元数据的属性和关联。
第二种方法是通过重新定义映射信息来覆盖trait属性。有关此解决方案的更多详细信息,请参阅此答案:https://stackoverflow.com/a/11939306/4829152