Symfony2/Doctrine2 (MySQL)更新后没有立即显示在Select上


Symfony2/Doctrine2 (MySQL) Updates not showing on a Select immediately after Update

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

在这段代码的末尾是一个Select查询,它使用JMSSerializerBundle返回装载的数据。但是有些更新没有出现在从JMSSerializerBundle返回的JSON中。

我不认为它与JMSSerializerBundle有关。

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

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

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

顺序如下:

    <
  • 开始事务/gh>
  • 修改实体
  • 坚持
  • 冲洗
  • 提交

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

$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;