如何在 yaml Doctrine 2 中添加约束索引
Posted
技术标签:
【中文标题】如何在 yaml Doctrine 2 中添加约束索引【英文标题】:How to add a constraint index in yaml Doctrine 2 【发布时间】:2012-02-12 04:32:00 【问题描述】:我有两个用 YAML 描述的表。
例如:
实体\用户: 类型:实体 表:用户 ID: ID: 类型:整数 发电机: 策略:自动 领域: 用户名: 类型:字符串 长度:64 一对多: 孩子们: 目标实体:用户到用户 映射者:父级 父母: 目标实体:用户到用户 映射者:孩子 实体\用户到用户: 类型:实体 表:user_to_user ID: ID: 类型:整数 发电机: 策略:自动 领域: 用户身份: 类型:整数 可为空:假 child_id: 类型:整数 可为空:假 多对一: 家长: 目标实体:用户 反转者:孩子们 加入列: 名称:user_id 引用的列名:id 孩子: 目标实体:用户 inversedBy: 父母 加入列: 名称:child_id 引用的列名:id在这种情况下,一切都很好,但实际上在表 user_to_user
中的数据库中没有字段的唯一索引:user_id
和 child_id
。
因此可以添加 2 个具有相同值的条目。
我正在尝试添加约束
独特的约束: child_user_idx: 列:child_id,user_id或其他 2 种方式:
ID: 用户身份: 类型:整数 child_id: 类型:整数或
ID: 家长: 关联键:真 孩子: 关联键:真尝试组合这些选项,但结果使用理论控制台验证,每次都会出现错误,但生成的 SQL 正是我所需要的。
其中一个例如:
关联parent
的连接列必须匹配源实体Entities\UserToUser
的所有标识符列,但是缺少child_id
。
child
的连接列必须与源实体Entities\UserToUser
的所有标识符列匹配,但是缺少user_id
。
我不太明白我必须添加什么才能正确通过验证
【问题讨论】:
您想通过该映射实现什么目标?您希望每个用户都有一个用户集合吗?以及作为“父”用户的属性? 我想找到使用 yaml 为 2 个外键添加唯一索引的解决方案 【参考方案1】:在使用 YAML 时,您可以尝试使用以下表示法:
Vendor\CategoryBundle\Entity\Category:
type: entity
table: category
indexes:
# the name of the index
category_slug_idx:
# Columns is an array, specify multiple columns for
# a compound index
columns: [ slug ]
id:
id:
type: integer
generator: strategy: AUTO
fields:
name:
type: string
slug:
type: string
可以看到可以在indexes下声明索引:node
【讨论】:
您似乎直接复制了我的答案(来自我发布的要点)作为单独的答案,因此投反对票 为什么不“发布答案”你没有回答问题,只是发布了一个链接和一个随机的 yaml 架构,它没有回答“如何在 yaml 学说 2 中添加约束索引”这个问题" 我发布的架构准确地描述了如何使用 cmets 为两个外键添加索引。您复制并粘贴了一个不适合该问题的架构,并直接从我的 Gist 中获取。 我不想引发任何激烈的战争,但是,@“Pete Michell”,你必须记住,如果你有一个“内容”,堆栈溢出社区对此非常清楚" 要显示,内容必须是“在”答案中,而不仅仅是“链接”。始终认为编码人员需要“看到”答案而不脱离 S.O - 顺便说一句,您放置“在”答案中的内容与链接中的内容“不同”。要点提到了indexes
键,而在您的答案的“正文”中,该词没有出现。就我个人而言,indexes
解决了我的问题。我不觉得@perrohunter“抄袭了你的答案”。【参考方案2】:
我想这就是你要找的https://gist.github.com/1845982
Vendor\BlogBundle\Entity\BlogImage:
type: entity
table: blog_image
# use two fields for our identifier
id:
blog:
# flag as an association key
associationKey: true
image:
associationKey: true
fields:
caption:
type: string
# Specify our relationships for above
manyToOne:
project:
targetEntity: Vendor\BlogBundle\Entity\Blog
inversedBy: images
oneToOne:
image:
targetEntity: Vendor\ImageBundle\Entity\Image
【讨论】:
以上是关于如何在 yaml Doctrine 2 中添加约束索引的主要内容,如果未能解决你的问题,请参考以下文章
我应该在 Doctrine 2 中使用 YAML/XML 还是注解映射?
如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射
如何使用 XML 或 YAML 而非注解映射来定义 Doctrine mappedSuperclass