我怎样才能在超类中拥有实体的列?
How can I have Columns of a Entity in a superclass?
我想在实体的超级class/基础class 中拥有一些属性。
我想要实现的最简单的例子是:
<?php
class BaseEntity{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
有没有办法用 doctrine ORM 做到这一点?上面的例子不行,Doctrine 没有在 SomeEntity 中找到主键。
您可以通过使 BaseEntity 本身成为实体来实现这一点,但我想避免这种情况。
基本上你需要做的就是使用Mapped Superclasses。
对于上面的示例,它看起来像这样:
<?php
/** @ORM\MappedSuperclass */
class BaseEntity{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
如果您偶然发现了这个问题,您可能也在寻找 Embeddables,具体取决于您要完成的任务。
我想在实体的超级class/基础class 中拥有一些属性。 我想要实现的最简单的例子是:
<?php
class BaseEntity{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
有没有办法用 doctrine ORM 做到这一点?上面的例子不行,Doctrine 没有在 SomeEntity 中找到主键。 您可以通过使 BaseEntity 本身成为实体来实现这一点,但我想避免这种情况。
基本上你需要做的就是使用Mapped Superclasses。 对于上面的示例,它看起来像这样:
<?php
/** @ORM\MappedSuperclass */
class BaseEntity{
/**
* @ORM\Id
* @ORM\Column(type="integer")
* @ORM\GeneratedValue
* @var int internal ID
*/
private int $id;
public function getId(): int{
return $this->id;
}
}
/**
* @ORM\Entity
* @ORM\Table(name="someentities")
*/
class SomeEntity extends BaseEntity{
// more stuff
}
如果您偶然发现了这个问题,您可能也在寻找 Embeddables,具体取决于您要完成的任务。