将可嵌入字段设置为父实体映射中的主键 - 原则2

2022-08-30 23:50:03

TLDR;Doctrine2:我需要知道是否有可能使嵌入中的字段从父实体(或MappedSuperclass')映射中转换为主键。我已经知道如何从嵌入式的映射中设置主键,但这并不理想(请参阅“长版本”)。

长版本;我正在尝试使用 Doctrine2 Embeddables 为我的实体创建身份值对象。

这是我的问题...

  • 我在一个实体(MyEntity)中有两个不同的可嵌入对象(MyEntityId 和其他EntityId)。

  • 我希望 MyEntityId 中的字段成为 MyEntity 的主键。

  • 由于我在同一实体中有两个标识可嵌入对象,因此我想在实体映射文件中定义主键字段,而不是在可嵌入映射中定义主键字段。

  • 如果我从可嵌入中定义主键,当我想对OtherEntityId执行相同的操作时,我会遇到问题(因为我在其他地方使用它)。

  • 在 MyEntityId 和其他EntityId 中映射主键会导致 MyEntity 具有我不需要的复合键。

这是我目前的地图...

MyEntity:
    embedded:
        MyEntityId:
            class: 'MyEntityId'
            columnPrefix: false
        OtherEntityId:
            class: 'OtherEntityId'
            columnPrefix: false

MyEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'MyEntityId'
                type: 'string'

OtherEntityId:
    type: 'embeddable'
        id: 
            id:
                column: 'OtherEntityId'
                type: 'string'

解决 方案?

  • 创建两个单独的可嵌入对象来表示相同的 Id 值对象(不是很干,也不太复杂)

  • 从实体映射可嵌入对象的主键字段(这可能吗?我在文档中的任何地方都找不到它)


答案 1

根据教义2文档:

嵌入对象只能包含具有基本@Column映射的属性。http://doctrine-orm.readthedocs.org/en/latest/tutorials/embeddables.html

我不认为您能够将@id属性指定给可嵌入的,只是基本的普通字段,因为它们是某种容器而不是实体。


答案 2

推荐