2011-10-02 93 views
7

如何使用YAML设置多对一关系“区域”的外键名称(编辑:不是属性本身的名称)?在Doctrine 2 ORM中命名关系?

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 

回答

11

看那getCreateConstraintSQL method in the AbstractPlatform class来看看如何选择外键的名称(line 1088)。

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

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

+0

所以没有“标准”的方式来改变它 - 除了迁移程序?我想这个名字是完全随机的,就像FK_28392f89329。 – gremo

+1

那么,你可能会重载平台类,但我不认为这是值得的,只是为了约束的命名。 –

+0

同意。谢谢,赏金+回答你! – gremo

3

由于@JakubZalas的回答,我看了一下Github中的代码,并且看到改变框架代码来做你想做的事情非常简单。

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

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

的AbstractAsset.php文件是在这个文件夹:Symfony的/供应商/教义/ DBAL/lib中/教义/ DBAL /模式

我想在我的项目的蚂蚁它工作得很好。

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