我有一个实体 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;
}
这样做的目的是将 Doctrine 注释的默认值移动到特征中,但也允许为每个实体设置一些自定义注释,例如
nullable
。 最佳答案
您正在寻找的是映射覆盖。
您应该查看 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
关于annotations - Symfony/Doctrine : Traits and Annotations,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36224000/