我查了几篇文章,但找不到合适的解决方案。
我的问题不简单:
我有一个说id
,url
和title
的实体。 URL应该是唯一的(在MySQL PDO中)。我已经成功创建了实体和架构,没有任何问题。现在当我走一些记录时,我会在每个记录上调用persist()
,最后是flush()
。问题是,当我尝试为URL插入重复的条目时,它给了我一个例外。怎么压抑它?
当插入重复条目时,它应该跳过它并插入其余条目。不需要事件,ON UPDATE语句,触发器和所有那些花哨的东西。
我已尝试捕获persist
或flush()
引发的任何异常,但似乎无法正确执行此操作。
欢迎任何想法,谢谢!
编辑:在此处找到我的解决方案:Symfony2 Controller won't catch exception
答案 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