2015-07-03 106 views
0

我剛剛修改了其中一個實體來設置可粘住的字段。Symfony2 Doctrine 1062重複條目

這是我加入到我的實體

/** 
* @var string 
* 
* @Gedmo\Slug(fields={"name"}, updatable=false) 
* @ORM\Column(name="slug", type="string", length=255, unique=true) 
*/ 
private $slugEn; 

然後我用的控制檯命令doctrine:generate:entitiesdoctrine:schema:update --force的代碼,但是當我用它,控制檯返回我這個錯誤消息:

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

我知道,強制修復是截斷數據庫並創建另一個時間,但我需要修復它沒有截斷。

那我該如何解決呢?

回答

1

我可以看到幾種可能的解決方案,取決於現有實體的類型和數量。

  1. 確保您沒有空的「名稱」字段。 slu is是從名稱生成的,並且您得到的錯誤是因爲您有幾個「名稱」爲空的實體。

  2. 使用多個字段來構建slu,,例如, 「id」,所以你要確保它始終有效並且始終是唯一的。

  3. 當提供的名稱爲空時,使用自定義方法創建創建隨機字符串的段落。

+0

你說得對,我必須讓該字段的「名稱」不爲空。有用。非常感謝! –

0

您可以暫時禁用您的UniqueKey檢查。

在MySQL中,您將使用:

SET UNIQUE_CHECKS=0; 
SET FOREIGN_KEY_CHECKS=0; 

//做的東西

SET UNIQUE_CHECKS=1; 
SET FOREIGN_KEY_CHECKS=1; 

這些都是簡單的SQL語句,可以這樣來執行。

不保證數據丟失或丟失有效的引用和約束。

相關問題