Symfony 2 + Doctrine:如何压制SQLSTATE [23000]:完整性约束违规:1062重复条目

时间:2012-02-08 23:01:53

标签: php mysql doctrine symfony

我查了几篇文章,但找不到合适的解决方案。

我的问题不简单:

我有一个说idurltitle的实体。 URL应该是唯一的(在MySQL PDO中)。我已经成功创建了实体和架构,没有任何问题。现在当我走一些记录时,我会在每个记录上调用persist(),最后是flush()。问题是,当我尝试为URL插入重复的条目时,它给了我一个例外。怎么压抑它?

当插入重复条目时,它应该跳过它并插入其余条目。不需要事件,ON UPDATE语句,触发器和所有那些花哨的东西。

我已尝试捕获persistflush()引发的任何异常,但似乎无法正确执行此操作。

欢迎任何想法,谢谢!

编辑:在此处找到我的解决方案:Symfony2 Controller won't catch exception

3 个答案:

答案 0 :(得分:12)

在Symfony 2.1+中,使用\Doctrine\DBAL\DBALException代替\PDOException来抓住它。

try {
    ...
} catch (\Doctrine\DBAL\DBALException $e) {
    // ... Error on database call
}

答案 1 :(得分:6)

请注意,如果您是例如,Symfony 2.1中会抛出PDOException。删除父关系条目。但是为了捕获它,你将使用ihsan

建议的声明
    try {
        $em = $this->getDoctrine()->getEntityManager();
        $em->remove($entity);
        $em->flush();
    } catch(\Doctrine\DBAL\DBALException $e)
    {
        // ...
    }

答案 2 :(得分:2)

try {
    $em->flush()
} catch (\PDOException $e) {
    // ... Error on database call
}

更好的方法是指定验证约束以避免必须处理此异常。在yaml(取自symfony docs

Acme\SomeBundle\Entity\Item:
    constraints:
        - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: url