2015-07-20 103 views
2

我試圖從我的PHP實體創建我的數據庫與Doctrine 2。CLI Doctrine 2-索引已經定義

下面是來自一流的團隊我的代碼:

<?php 
// Team.php 
/** 
* @Entity @Table(name="team") 
**/ 
class Team 
{ 
    /** 
    * @Id 
    * @OneToOne(targetEntity="User") 
    * @JoinColumn(name="userID", referencedColumnName="id") 
    */ 
    protected $user; 

    /** 
    * @Column(type="string",length=30) 
    * @var string 
    **/ 
    protected $function; 

    /** 
    * @Column(type="text") 
    * @var string 
    **/ 
    protected $description; 

    /** 
    * @OneToOne(targetEntity="File") 
    * @JoinColumn(name="fileID", referencedColumnName="id") 
    */ 
    protected $img; 

    /** 
    * @OneToOne(targetEntity="File") 
    * @JoinColumn(name="fileID", referencedColumnName="id") 
    */ 
    protected $cv; 

    /** 
    * @Id 
    * @OneToOne(targetEntity="Language") 
    * @JoinColumn(name="languageID", referencedColumnName="id") 
    */ 
    protected $lang; 

    public function getUser() 
    { 
     return $this->user; 
    } 

    public function setUser(User $user) 
    { 
     $this->user = $user; 
    } 

    public function getFunction() 
    { 
     return $this->function; 
    } 

    public function setFunction($function) 
    { 
     $this->function = $function; 
    } 

    public function getDescription() 
    { 
     return $this->description; 
    } 

    public function setDescription($description) 
    { 
     $this->description = $description; 
    } 

    public function getImg() 
    { 
     return $this->img; 
    } 

    public function setImg($img) 
    { 
     $this->img = $img; 
    } 

    public function getCv() 
    { 
     return $this->cv; 
    } 

    public function setCv($cv) 
    { 
     $this->cv = $cv; 
    } 

    public function getLang() 
    { 
     return $this->lang; 
    } 

    public function setLang(Language $language) 
    { 
     $this->lang = $language; 
    } 
} 

和錯誤:

[Doctrine\DBAL\Schema\SchemaException] 
An index with name 'uniq_c4e0a61f93cb796c' was already defined on table 'team' 

學說是由作曲家加載和使用與Windows CMD(如果這能幫助)。

我已經看到一個問題已經報告v.2.5.0,所以我加載2.4.7但同樣的錯誤,所以我嘗試開發主,但仍然是相同的。

我也嘗試刪除複合標識並將其替換爲簡單的生成@Id,甚至沒有(原則是然後說實體「團隊」沒有指定標識符/主鍵)。

此代碼與v.2.4.2一起使用,但重點是更新用於此項目的工具。

有人知道我該怎麼做嗎?

+1

你能提供整體嗎?這是特別的註釋。 –

+0

當然可以!這是整個文件。請注意,我可以在沒有Team類的情況下創建數據庫,這是唯一不起作用的文件。 – Lanfeust

回答

4

好吧好吧,我發現這個問題:

/** 
* @OneToOne(targetEntity="File") 
* @JoinColumn(name="fileID", referencedColumnName="id") 
*/ 
protected $img; 

/** 
* @OneToOne(targetEntity="File") 
* @JoinColumn(name="fileID", referencedColumnName="id") 
*/ 
protected $cv; 

更確切地說@JoinColumn(name="fileID", referencedColumnName="id"),列名fileID是上是相同的。

無論如何,謝謝!

+0

這是一個教條的錯誤,或者我們不能多次使用一列? –

+0

這是我的錯誤。你不能有兩個相同的列名,這是非常合理的。 – Lanfeust

0

你問題就在這裏:

/** 
* @Id 
* @OneToOne(targetEntity="Language") 
* @JoinColumn(name="languageID", referencedColumnName="id") 
*/ 
protected $lang; 

你必須從你的$lang屬性中刪除的@Id。關聯不應被標記爲實體標識符。

@Id註釋用於標記主鍵(http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-id)。您的關聯不是主鍵,因此遷移架構原則時將嘗試添加索引並映射外鍵(具體取決於配置)。

由於您將關聯標記爲標識符,因此與您的$id鍵有衝突。

+0

我刪除了這個'@ Id',另一個''user'因爲它也是FK。 – Lanfeust

+0

它解決了這個問題嗎? – Mark

+0

不好意思輸入太快..不,它不是,我也刪除了其他Id,因爲它也是一個FK並創建了一個生成的但仍然不好。這很奇怪,因爲我有另一個實體使用複合標識,其中一個是'@ Id'上的'@ Id'。 – Lanfeust