gpt4 book ai didi

php - 将可嵌入字段设置为父实体映射的主键 - Doctrine2

转载 作者:可可西里 更新时间:2023-11-01 12:22:01 24 4
gpt4 key购买 nike

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

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

这是我的问题...

  • 我在实体 (MyEntity) 中有两个不同的可嵌入对象(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'

解决方案?

  • 创建两个单独的 Embeddables 来表示相同的 Id 值对象(不是很枯燥也不会太复杂)

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

最佳答案

我使用 Doctrine 类型 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;
}

关于php - 将可嵌入字段设置为父实体映射的主键 - Doctrine2,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25220650/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com