2011-10-02 37 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中,而不在我本地機器的文件中。