我找到了following example in the doctrine documentation,他们在其中添加了Map到trait:
/**
* Trait class
*/
trait ExampleTrait
{
/** @Id @Column(type="string") */
private $id;
/**
* @Column(name="trait_foo", type="integer", length=100, nullable=true, unique=true)
*/
protected $foo;
/**
* @OneToOne(targetEntity="Bar", cascade={"persist", "merge"})
* @JoinColumn(name="example_trait_bar_id", referencedColumnName="id")
*/
protected $bar;
}
我试图Map一个trait,而不必在继承它的类中复制Map。我还没有在上面诚实地尝试过,因为我目前的项目使用yaml进行Map,但它看起来像一个普通的php类在使用trait时也会继承Map。
有没有一种方法可以不使用关联而使用yaml或xml来继承这个trait的Map?我试着把这个特性设置为mapped superclass,但是没有成功,但是我基本上在寻找相同类型的想法。
谢谢
2条答案
按热度按时间apeeds0o1#
我发现实现Maptrait的唯一方法是使用订阅者。下面的代码应该适用于您的示例,并且很容易定制:
不要忘记使用
doctrine.event_subscriber
标记将其定义为服务。v6ylcynt2#
使用YAML声明mappedSupperClass:
使用XML声明它:
如果你运行
app/console doctrine:generate:entities
,你将能够在其他实体中使用mappedSuperClass作为上位。