Ben*_*Ben 9 php embeddable doctrine-orm
TLDR; Doctrine2:我需要知道是否可以在Parent Entities(或MappedSuperclass')映射中将Embeddable中的字段设置为主键.我已经知道如何从Embeddable的映射中设置主键,但这并不理想(参见"长版本").
长版; 我正在尝试使用Doctrine2 Embeddables为我的实体创建身份值对象.
这是我的问题......
我在实体(MyEntity)中有两个不同的Embeddables(MyEntityId和OtherEntityId).
我希望MyEntityId中的一个字段成为MyEntity的主键.
由于我在同一实体中有两个标识嵌入,我想在实体映射文件中定义主键字段而不是可嵌入映射.
如果我在嵌入式中定义主键,那么当我想对OtherEntityId执行相同操作时遇到问题(因为我在其他地方使用它).
映射MyEntityId和OtherEntityId中的主键导致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'
Run Code Online (Sandbox Code Playgroud)
解决方案?
创建两个单独的Embeddables来表示相同的Id值对象(不是非常干燥和太复杂)
从实体映射Embeddable的主键字段(这可能吗?我在文档中找不到它)
小智 0
我使用 Doctrine Types https://www.doctrine-project.org/projects/doctrine-orm/en/2.13/cookbook/custom-mapping-types.html#custom-mapping-types而不是 Embeddables 来实现这一点,所以对于系统中的每个ID我都有一个单独的类型。这是一点额外的代码,但至少我每个 ID 只有一个 VO。
使用类型,您可以像这样实现您的实体:
class Post
{
#[ORM\Id]
#[ORM\Column(name: 'id', type: 'PostId')]
private PostId $postId;
#[ORM\Column(type: 'UserId')]
private UserId $userId;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1367 次 |
| 最近记录: |