在许多实体中拥有相同实体字段的最佳方式是什么? 例如,“相关实体”将出现在 8 个表中。
class User { #[ORM\Column(length: 255)] private ?string $relatedEntity = null; }
class User2 { #[ORM\Column(length: 255)] private ?string $relatedEntity = null; }
“User”中的RelatedEntity 就像其他人的父字段。有什么方法可以将它们相互映射以使查询更简单吗?
我尝试过 OneToOne,但每次它都会添加新用户,但我不需要这样做。
P粉2152927162023-09-12 17:26:55
您有几个选择,您可以使用特征 a> 或使用抽象类。就像 @LBA 在他的回答中所说,如果您的实体有许多共同点并且只有一些差异,您可能需要研究 继承映射。
特征示例:
trait RelatedEntityTrait { #[ORM\Column(length: 255)] private ?string $relatedEntity = null; public function getRelatedEntity(): ?string { return $this->relatedEntity; } public function setRelatedEntity(?string $relatedEntity): void { $this->relatedEntity = $relatedEntity; } } class User { use RelatedEntityTrait; } class User2 { use RelatedEntityTrait; }
抽象类示例:
abstract class BaseUser { #[ORM\Column(length: 255)] private ?string $relatedEntity = null; public function getRelatedEntity(): ?string { return $this->relatedEntity; } public function setRelatedEntity(?string $relatedEntity): void { $this->relatedEntity = $relatedEntity; } } class User extends BaseUser { } class User2 extends BaseUser { }