【问题标题】:Symfony2/Doctrine2 (MySQL) Updates not showing on a Select immediately after UpdateSymfony2/Doctrine2 (MySQL) 更新后未立即在 Select 上显示更新
【发布时间】:2015-10-23 08:55:00
【问题描述】:

我在 Doctrine2 中发生了几个更新,每个更新都在一个事务中。

此代码的末尾是一个 Select 查询,它使用 JMSSerializerBundle 返回大量数据。但是从 JMSSerializerBundle 返回的 JSON 中不存在一些更新。

我认为它与 JMSSerializerBundle 无关。

但更多与 Doctrine2 相关。如果我再次运行选择查询,那么数据就在那里。所以它就在那里,只是没有在同一个 HTTP 调用中返回。

代码相对简单,所以我没有包括在内,这更多是一个关于理解更新数据可能会发生什么而有些不显示的问题。

事务应该在选择查询发生时完成,不是吗?

顺序如下:

  • 开始交易
  • 对实体进行更改
  • 坚持
  • 刷新
  • 提交

【问题讨论】:

  • 你是否对实体进行了持久化()?
  • 是的,刚刚为你编辑了我的 Q。
  • 对不起,我应该改写;你确定你坚持了吗? :D 我已经做了很多次修改,但后来完全忘记了坚持或坚持在错误的地方。如果没有代码示例,它可能首先要查看。
  • 是的。因为如果我不这样做,它就根本不起作用,即使是在随后的请求中?
  • 这真的取决于你如何实现它(即我发现我错过的最常见的领域是在循环中)。同样,没有代码很难发现。

标签: php mysql symfony doctrine-orm


【解决方案1】:

这可能取决于交易中的隔离级别。 要使其在事务中工作,您需要设置:

$entityManager
    ->getConnection()
    ->setTransactionIsolation(Connection::TRANSACTION_READ_COMMITTED);

这样,事务中写入的任何内容也都是可读的。

其他可能的值:

const TRANSACTION_READ_UNCOMMITTED = 1;
const TRANSACTION_READ_COMMITTED = 2;
const TRANSACTION_REPEATABLE_READ = 3;
const TRANSACTION_SERIALIZABLE = 4;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多