CLI Doctrine 2 - 索引已定义

时间:2015-07-20 17:38:56

标签: php doctrine-orm doctrine entity identifier

我正在尝试使用我的PHP实体中的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'

Doctrine从作曲家加载并与Windows CMD一起使用(如果可以帮助的话)。

我已经看到v.2.5.0报告了一个问题所以我加载了2.4.7但是同样的错误,所以我尝试了dev-master但仍然是相同的。

我也尝试删除复合ID并将其替换为简单生成的@Id,甚至没有(Doctrine当时说没有为实体“团队”指定的标识符/主键)。

此代码与v.2.4.2一起使用,但重点是更新用于此项目的工具。

有人知道我该怎么做吗?

2 个答案:

答案 0 :(得分:6)

好吧,我发现了问题:

/**
 * @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对于两者都是相同的。

非常感谢!

答案 1 :(得分:0)

你的问题在于:

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

您必须从@Id媒体资源中移除$lang。不应将关联标记为实体标识符。

@Id注释用于标记主键(http://doctrine-orm.readthedocs.org/en/latest/reference/annotations-reference.html#annref-id)。当您迁移架构原则时,您的关联不是主键,它将尝试添加索引并映射外键(具体取决于配置)。

由于您将关联标记为标识符,因此与您的$id密钥冲突。