Symfony/Doctrine: 特征和注释

3

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

class Test {
   use Trait_title;
}

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

这个方法可以正常工作。但是,当我尝试将注释放在use语句前的Test Class中时,无论是部分还是全部注释,在尝试更新模式时 Symfony 都会忽略它们:

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

trait Trait_title {
    private $title;
}

这样做的目的是将Doctrine注释的默认值移到Trait中,但也允许在实体中设置一些自定义注释,例如nullable


导入语句中导入的是整个上下文,而不仅仅是属性。我认为你无法从这种方法中得到你想要的结果。 - Jean Carlo Machado
1个回答

3
你需要的是映射覆盖。你应该查看Doctrine官方文档来实现这个功能:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/tutorials/override-field-association-mappings-in-subclasses.html。还有一个针对你使用情况的示例,重写Trait映射信息。有时候,覆盖映射也会来自使用Trait的实体,其中Trait具有映射元数据。本教程解释了如何覆盖映射元数据,即特定的属性和关联元数据。第二种方法是通过重新定义映射信息来覆盖Trait属性。有关此解决方案的详细信息,请参见此答案:https://dev59.com/Gmct5IYBdhLWcg3wpO7H#11939306

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接