我看了几篇文章,但找不到一个有效的解决方案。
我的问题很简单:
我有一个实体,比如id
、url
和title
。URL应该是唯一的(在MySQL PDO中)。我已经成功地创建了实体和模式,没有任何问题。现在,当我遍历一些记录时,我在每个记录上调用persist()
,最后调用flush()
。问题是,当我尝试为URL插入重复条目时,会出现异常。如何抑制它?
当插入一个重复的条目时,它应该跳过它并插入其余的条目。不需要事件、ONUPDATE语句、触发器和所有这些花哨的东西。
我尝试过捕捉persist
或flush()
抛出的任何异常,但似乎都无法正确执行。
欢迎有任何想法,谢谢!
编辑:在这里找到了我的解决方案:Symfony2控制器赢得了';t捕获异常
在Symfony 2.1+中,使用'Doctrine'DBAL'DBALException
而不是'PDOException
捕获它。
try {
...
} catch ('Doctrine'DBAL'DBALException $e) {
// ... Error on database call
}
请注意,如果您正在删除具有父关系的条目,则Symfony 2.1中会抛出PDOException。但为了抓住它,你将使用ihsan 建议的声明
try {
$em = $this->getDoctrine()->getEntityManager();
$em->remove($entity);
$em->flush();
} catch('Doctrine'DBAL'DBALException $e)
{
// ...
}
try {
$em->flush()
} catch ('PDOException $e) {
// ... Error on database call
}
更好的方法是指定一个验证约束,以避免必须处理此异常。在yaml(取自symfony文档)
Acme'SomeBundle'Entity'Item:
constraints:
- Symfony'Bridge'Doctrine'Validator'Constraints'UniqueEntity: url