2013-01-12 22 views
0

我发现类似的问题,但他们的应用程序,矿井涉及CLI命令,即php app/console doctrine:schema:update --forcephp app/console doctrine:migrations:migrate主义架构更新/迁移错误:唯一索引

错误:

Migration 20130112151503 failed during Execution. Error An exception occurred wh 
ile executing 'CREATE UNIQUE INDEX UNIQ_68D3801E989D9B62 ON artists (slug)': 



    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' for key 
    'UNIQ_68D3801E989D9B62' 




    [Doctrine\DBAL\DBALException] 
    An exception occurred while executing 'CREATE UNIQUE INDEX UNIQ_68D3801E989 
    D9B62 ON artists (slug)': 

    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '' fo 
    r key 'UNIQ_68D3801E989D9B62' 

我真的希望移民会照顾这个错误,但是可惜。我该如何解决这个问题,例如我只能在实时服务器上运行migrations命令。为什么迁移不会首先删除唯一索引(如果存在)?或者为什么它没有检测到已经有一个唯一的索引?

回答

3

SQL错误并不是说已经有一个唯一的索引,而是说slug列有重复的值,并且因为它而不能添加索引。

确保slug列只有唯一(或null,但可能不推荐用于slug列)值,然后尝试再次运行迁移。

+0

啊,我明白了。它是空的,我会改变它 – Tjorriemorrie

+0

@Mike,你的意思是说,如果我已经有数据库填充数据,并创建新的列与独特的:真我会一直得到这个错误?那么如何处理无法在生产服务器上执行的迁移? –

+0

是的,如果您尝试在已具有重复值的列上创建唯一索引,那么您将遇到错误。在尝试创建唯一索引之前,您必须先解析所有重复项。如果尝试执行其他操作,您的迁移将会崩溃。 – Mike

0

这是因为数据库中的slug字段为空或重复。所以,试着删除表格中的所有内容并重新生成命令