2014-07-12 61 views
0

我依靠外部api來填充我的表,並且通過這種關係,我可以用更少的查詢處理應用程序上的一些必需的功能。Symfony2 OneToMany雙向引用不是id列

而不是錯誤和警告表和FK創建後使用該命令,但我不知道我是否可以繞過這個錯誤,否則將在未來產生問題。

顯然我可以引用id並且問題會消失,但是如果這是可能的話,現在需要。

我有兩個表:

RARITIES 

id 
name 
... 

ITEMS 

id 
item_rarity 
... 

而且實體的樣子:

class Rarity 
{ 
    ... 

    /** 
    * @ORM\OneToMany(targetEntity="Item", mappedBy="rarity") 
    */ 
    private $items; 

    public function __construct() { 
     $this->items = new ArrayCollection(); 
    } 

    ... 
} 

class Item 
{ 
    ... 

    /** 
    * @ORM\ManyToOne(targetEntity="Rarity", inversedBy="items") 
    * @ORM\JoinColumn(name="item_rarity", referencedColumnName="name") 
    **/ 
    private $rarity; 

    ... 
} 

當我創建或更新架構,它輸出一些錯誤和警告:

[Doctrine\ORM\Tools\ToolsException]                                    
Schema-Tool failed with Error 'An exception occurred while executing 'ALTER TABLE items ADD CONSTRAINT FK_E11EE94D3139CB89 FOREIGN KEY (item_rarity) REFERENCES rarities (name)':                                            
SQLSTATE[HY000]: General error: 1005 Can't create table 'd2a.#sql-4fa_7c' (errno: 150)' while executing DDL: ALTER TABLE items ADD CONSTRAINT FK_E11EE94D3139CB89 FOREIGN KEY (item_rarity) REFERENCES rarities (name)                                                                     


[Doctrine\DBAL\DBALException]                              
An exception occurred while executing 'ALTER TABLE items ADD CONSTRAINT K_E11EE94D3139CB89 FOREIGN KEY (item_rarity) REFERENCES rarities (name)': 
SQLSTATE[HY000]: General error: 1005 Can't create table 'd2a.#sql-4fa_7c' (errno: 150)                

[PDOException]                   
SQLSTATE[HY000]: General error: 1005 Can't create table 'd2a.#sql-4fa_7c' (errno: 150 

謝謝你的建議!

回答

0

首先,感謝Alex,他讓我知道發生了什麼。

就像他說:「有可能是兩個稀有以儘可能主義而言相同的名稱」,所以,讓讓rarities.name列獨特:

/** 
* Rarity 
* 
* @ORM\Table(name="rarities", 
*   uniqueConstraints={@ORM\UniqueConstraint(name="unique_name", columns={"name"})}) 
* @ORM\Entity 
*/ 
class Rarity 
{ 

和它的作品,沒有任何錯誤,不警告,列items.item_rarity引用rarities.name和rarities.name不是表中的主鍵。

我希望它可以幫助別人,它花了我的時間!

1

我懷疑這與試圖通過「名稱」鏈接兩者有關,該名稱不是唯一的標識符。就學說而言,可能有兩個同名的稀有物。 「ID」工作的原因是因爲它使用@Id聲明爲註解的主鍵,因此認爲是唯一的:

/** 
* @ORM\Column(type="integer") 
* @ORM\Id 
* @ORM\GeneratedValue(strategy="AUTO") 
*/ 
protected $id; 

沒有尋找到它,我會認爲這種關係需要Items引用回到主鍵。

+0

Ty男人,但就像我說的,我知道添加這將解決問題,購買爲什麼表和FK被正確創建,但警告和錯誤出現,爲什麼我想知道。 – ruudy

+0

夥伴,最後你給我一個主意,它的作品! – ruudy

+0

太好了。祝你的項目好運。 – Alex

相關問題