我想在实体的超类/基类中拥有一些属性。我想要实现的最简单的例子是:
<?php
class BaseEntity{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORMEntity
* @ORMTable(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
有没有办法用ORM学说做到这一点?上面的例子不起作用,Doctrine在SomeEntity中找不到主键。您可以通过使BaseEntity本身成为实体来实现这一点,但我希望避免这种情况。
基本上,您需要做的是使用映射超类。对于上面的例子,它看起来像这样:
<?php
/** @ORMMappedSuperclass */
class BaseEntity{
/**
* @ORMId
* @ORMColumn(type="integer")
* @ORMGeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORMEntity
* @ORMTable(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
如果你偶然发现了这个问题,你可能也在寻找Embeddables,这取决于你试图实现的目标。