sef*_*rov 17 doctrine symfony doctrine-orm
如何使用Doctrine2忽略重复的条目?
错误示例:
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 'symfony' for key 'UNIQ_389B783389B783'
Run Code Online (Sandbox Code Playgroud)
And*_*nko 16
在Symfony 3中,您可以重置管理器并在捕获异常后通过调用对象的resetManager()方法继续使用它.DoctrineUniqueConstraintViolationException
这是一个例子:
try {
$em = $this->getDoctrine()->getManager();
$entity = Product::create()
->setTitle('Some title')
->setUrl('http://google.com');
$em->persist($entity);
$em->flush();
}
catch (UniqueConstraintViolationException $e) {
$this->getDoctrine()->resetManager();
}
Run Code Online (Sandbox Code Playgroud)
ILi*_*cos 14
这是Doctrine的麻烦之一,它不可能执行INSERT/UPDATE Ignore,有一些解决方法,比如创建一个检查行是否存在的方法,如果确实存在,那么就跳过它.
您可以捕获异常,以便您的脚本不会以异常结束.但是,实体经理将被关闭,您将无法再使用它.您仍然可以使用PDO,但您可以在数据库中插入一条记录,表明您的批处理失败,因为X它需要重新启动(这就是我通常所做的).
如果上面的选项都不适合你,最终我最终编写原始SQL来进行批处理,我根本不使用Doctrine,它最终会更快,并且执行INSERT/UPDATE Ignore的能力使它变得毫无疑问.