2015-07-20 2 views
2

Я пытаюсь создать свою базу данных с Doctrine 2 из моего объекта PHP.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, но такую ​​же ошибку, поэтому я попробовал dev-master, но все тот же.

Я также попытался удалить составной идентификатор и заменить его простым сгенерированным символом @Id или даже нет (в Доктрине тогда говорилось: «Нет идентификатора/первичного ключа, указанного для Entity« Team »).

Этот код работал с 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; 

Вы должны удалить @Id из вашей $lang собственности. Ассоциации не должны быть помечены как идентификаторы объектов.

Аннотация используется для обозначения первичного ключа (http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-id). Ваша связь не является первичным ключом, когда миграция доктрины схемы будет пытаться добавить индекс и отобразить внешний ключ (в зависимости от конфигурации).

Поскольку вы отметили ассоциацию как идентификатор, это конфликтует с вашим ключом $id.

+0

Я удалил этот '@ Id', а другой - в' $ user', потому что это также FK. – Lanfeust

+0

Решил ли проблема? – Mark

+0

Извините, войдите в систему слишком быстро .. Нет, это не так, я также удалил другой Идентификатор, потому что это также FK и создал сгенерированный, но все еще не в порядке. Это странно, потому что у меня есть другой объект, работающий с составным идентификатором, который является '@ Id' на' $ lang'. – Lanfeust

Смежные вопросы