如何在 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_idchild_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 中的新 YAML 迁移数据库

我应该在 Doctrine 2 中使用 YAML/XML 还是注解映射?

如何在 Symfony 4 上配置 Doctrine 以使用 yaml 映射

如何使用 XML 或 YAML 而非注解映射来定义 Doctrine mappedSuperclass

如何使Doctrine PostgreSQL外键约束DEFERRABLE

Doctrine 2,Symfony 2 中的独特约束