【问题标题】:Naming a relation in Doctrine 2 ORM?在 Doctrine 2 ORM 中命名关系?
【发布时间】:2011-10-02 00:59:27
【问题描述】:

如何使用 YAML 为多对一关系“区域”设置外键名称(edit:不是属性本身的名称)?

SWA\TestBundle\Entity\Province:
  type: entity
  table: province
  uniqueConstraints:
    UNIQUE_PROVINCE_CODE:
      columns: code
  id:
    id:
      type: integer
      generator: { strategy: AUTO }
  fields:
    code:
      type: integer
    name:
      type: string
      length: 255
    short_name:
      type: string
      length: 2
  manyToOne:
    region:
      targetEntity: Region
      inversedBy: provinces

【问题讨论】:

    标签: symfony doctrine doctrine-orm yaml


    【解决方案1】:

    查看getCreateConstraintSQL method in the AbstractPlatform class 以了解如何选择外键名称 (line 1088)。

    它直接取自约束名称。影响约束名称将影响外键名称。

    作为一种解决方法,您可以删除约束并使用 a doctrine migration 中的新名称重新创建它。

    【讨论】:

    • 所以没有“标准”的方式来改变它——除了迁移过程?我猜这个名字是完全随机的,比如 FK_28392f89329。
    • 好吧,你可以重载平台类,但我认为仅仅为了命名约束是不值得的。
    • 外键“影响约束名称”如何?
    【解决方案2】:

    由于@JakubZalas 的回答,我查看了 Github 中的代码,发现更改框架代码以做你想做的事情真的很容易。

    如果您检查 AbstractPlatform 类所在的文件夹,您会看到有一个 ForeignKeyConstraint 类。在其中你会看到它继承自 AbstractAsset。

    现在 AbstractAsset 类有一个 _generateIdentifierName 方法。如果您在 in github 中检查此方法,您会发现它有一个注释部分,可以满足您的需求。您只需取消注释该部分,注释实际活动部分,将 $prefix 参数更改为 $postfix 即可。将使用带有相应后缀的表名和列名生成约束名称。

    AbstractAsset.php 文件是这个文件夹:Symfony/vendor/doctrine/dbal/lib/Doctrine/DBAL/Schema

    我在我的项目中尝试过它工作正常。

    最后一个信息:至少对于我的项目,我上面提到的注释部分仅在 github 中,而不在我本地机器的文件中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-12
      • 2011-05-05
      • 1970-01-01
      • 1970-01-01
      • 2013-09-02
      • 1970-01-01
      相关资源
      最近更新 更多