Php,请求锁定数据库?

时间:2016-12-30 10:31:45

标签: php symfony doctrine-orm

这个问题可能过于宽泛。因此,网站使用通用数据库,如果在第2行:

\Doctrine\Repository::getUser()->findById(1)

没问题,但可能会删除此用户。所以6行之后,在第8行:

\Doctrine\Repository::getUser()->findById(1)

会抛出异常!一般解决方案是在请求正在进行时阻止DELETE / UPDATE命令。但是如何?

2 个答案:

答案 0 :(得分:2)

这就是交易的目的。见http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/transactions-and-concurrency.html#approach-2-explicitly

您案例的修改示例:

$em->getConnection()->beginTransaction(); // suspend auto-commit
try {
    \Doctrine\Repository::getUser()->findById(1)
    //... do some work
    \Doctrine\Repository::getUser()->findById(1)
    // you're done with that particular user
    $em->getConnection()->commit();
} catch (Exception $e) {
    $em->getConnection()->rollBack();
    throw $e;
}

请注意您的存储库正在使用EntityManager的正确实例($em

答案 1 :(得分:0)

根据我的经验,完全删除数据库中的任何数据都是不好的做法。看到公司的大数据是一个重要的事情。因此,我建议使用布尔值来“删除”内容,以便您可以随时返回并查看用户和其他内容。但是,如果你真的想删除用户处理异常

应该像

一样
if(getUser->findById(1)){
   getUser->findById(1);
}else{
   return "some error message" ; 
}
相关问题