CLI Doctrine 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

好吧好吧,我发现这个问题:

/** 
* @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

你问题就在这里:

/** 
* @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