php 如何在多个实体中使用同一个实体字段?

camsedfj  于 2023-04-28  发布在  PHP
关注(0)|答案(3)|浏览(89)

在多个实体中拥有相同实体字段的最佳方法是什么?例如,“relatedEntity”将出现在8个表中。

class User
{
    #[ORM\Column(length: 255)]
        private ?string $relatedEntity = null;
}
class User2
{
    #[ORM\Column(length: 255)]
        private ?string $relatedEntity = null;
}

“用户”中的RelatedEntity就像其他人的父字段。有没有办法将它们相互Map以使查询更简单?
我试过一对一,但每次它添加一个新用户,我不需要。

ajsxfq5m

ajsxfq5m1#

你有几个选择,你可以使用一个Trait或使用一个abstract class。就像@LBA在他的回答中说的那样,如果你的实体有很多共同点,只有一些差异,你可能想看看inheritance mapping
性状示例:

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
{
}
gwo2fgha

gwo2fgha2#

有一个围绕这一点的整个世界和几种方法。

  • MappedSuperclass
  • 实体继承
  • 单继承和类表继承都是由Doctrine支持的,请阅读此处

另一个选择是使用

  • 性状

就像一些常见的理论扩展一样,请找到一些文档here的方法
不知道你到底想达到什么目的,很难推荐一个或另一个。
请带着更详细的问题回来。

icomxhvb

icomxhvb3#

我会尽力解释的用户有一个useruuid字段,其他实体也有同样的useruuid字段--只是为了知道哪个用户填写了哪个表单。
每个表单都有自己的实体-应用程序的其余部分需要这样做。
那么,我如何将每个实体'uuid'与父'user -uuid'连接起来?
这是所有关于效率与查询获得所有用户填写的表单。现在它离开了连接每个实体并检查uuid是否匹配。

相关问题