Php,请求时锁定数据库?

标签 php symfony doctrine-orm

这个问题可能太宽泛了。所以网站使用通用数据库,如果在第 2 行怎么办:

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

没问题,但该用户可能会被删除。 6 行后,第 8 行:

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

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

最佳答案

这就是交易的目的。请参阅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) 的正确实例

关于Php,请求时锁定数据库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41394700/

相关文章:

php - 在构造函数中初始化集合有什么用

php - Doctrine 只选择第一行数据,无论如何

php - 对行求和并插入新列

php - 数据库连接中的 OOP php 错误

php echo来自mysql和日期时间选择的结果

php - vs 代码上的 spawn/usr/bin/php ENOENT 错误

php - 内存泄漏symfony和独白和控制台

php - 带有参数数组的 SQL 请求

php - symfony 部分 View 中的 Javascript 源代码

symfony - Twig 将变量插入翻译后的字符串中