我有一个实体 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/

10-16 19:20