CLI Doctrine 2 - 索引已经定义

CLI Doctrine 2 - index already defined

我正在尝试使用我的 PHP 实体的 Doctrine 2 创建我的数据库。

这是我来自 class 团队的代码:

<?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 从 composer 加载并与 Windows CMD 一起使用(如果有帮助的话)。

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

我还尝试删除复合 Id 并将其替换为简单生成的 @Id,甚至 none(当时 Doctrine 说没有为实体 "Team" 指定的 identifier/primary 键) .

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

有人知道我该怎么做吗?

你的问题出在这里:

/**
 * @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 密钥冲突。

好吧好吧,我找到问题了:

/**
 * @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 相同。

谢谢!