【问题标题】:Working with Doctrine array of enum and store it in a separate table使用枚举的 Doctrine 数组并将其存储在单独的表中
【发布时间】:2021-04-20 14:46:30
【问题描述】:

我目前正在构建实体模型,并且我的 Doctrine 实体之一与外部字典(如 ENUM)具有多对多关系。所以实体字段将是一个枚举数组。

我正在寻找一种方法将其作为我的实体上的数组字段,但将其存储为单独的数据库表。

希望获得任何建议/链接/等。

【问题讨论】:

    标签: php doctrine-orm


    【解决方案1】:

    这个问题有点断章取义,但是..

    多对多在您的实体中已经是一个数组(迭代器)。

    您可以创建自己的实体充当多对多并将列设置为枚举。

    【讨论】:

    • 问题是我不需要第二方的实体。我希望我的实体对不是实体的类有 ManyToMany。
    • 我目前将其存储为 JSON 并使用 @Assert\All({@Assert\Choice}) 进行验证。但这使得通过这种“关系”进行查询变得有点困难。
    • 我的意思是你可以自己创建多对多关系。您在中间创建一个实体,其中包含您想要的所有属性,并通过 ManyToOne 链接它们。在您的实体中,您将拥有一个 OneToMany(它是一个数组)。
    【解决方案2】:

    最后,我决定创建一个实体来存储这个关系。为确保在与父实体取消链接时将其删除,我在 OneToMany 关系端使用了 orphanRemoval=true 选项。

    class Entity {
        /**
         * @ORM\OneToMany(targetEntity="EntityType", mappedBy="entity", orphanRemoval=true)
         */
        protected $types;
    }
    
    class EntityType {
        /**
         * @ORM\ManyToOne(targetEntity="Entity")
         */
        protected $entity;
        /**
         * @ORM\Column(type="MyEnum")
         */
        protected MyEnum $type;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 2017-03-14
      • 1970-01-01
      • 2022-06-14
      • 2012-08-24
      • 2016-06-23
      相关资源
      最近更新 更多