Symfony2 Doctrine 1062重复输入

时间:2015-07-03 13:29:46

标签: symfony doctrine-orm

我刚修改了我的一个实体来设置一个可缓冲的字段。

这是我添加到我的实体的代码

/**
 * @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]:完整性约束违规:1062重复条目''关键' UNIQ_70F2BD0F989D9B62'

我知道,强制修复是截断数据库并创建另一个时间但我需要修复它而不截断。

我该如何解决?

2 个答案:

答案 0 :(得分:1)

我可以看到几种可能的解决方案,具体取决于现有实体的类型和数量。

  1. 确保您没有清空“名称”字段。 slug是从name生成的,你得到的错误是因为你有几个“name”为空的实体。

  2. 使用多个字段构建slug,例如“id”所以你要确保它始终有效且始终是唯一的。

  3. 使用自定义方法创建在提供的名称为空时创建随机字符串的slug。

答案 1 :(得分:0)

您可以暂时禁用UniqueKey检查。

在MySQL中,您将使用:

SET UNIQUE_CHECKS=0;
SET FOREIGN_KEY_CHECKS=0;

//做东西

SET UNIQUE_CHECKS=1;
SET FOREIGN_KEY_CHECKS=1;

这些是简单的sql语句,可以这样执行。

无法保证数据丢失或丢失有效的引用和约束。