我有一个 Doctrine 实体的实例,它作为参数传递给 Symfony 服务的方法。
我在方法之外进行所有数据操作,但由于某种原因,这些更改没有反映在方法中。
例如:
// I've a payment entity, the current status is "created"
// ...data manipulation...
$payment->setStatus('completed');
$this->em->flush($payment);
...
$this->myService->doStuff($payment);
// In the doStuff method...
public function doStuff(Payment $payment) {
// The status still "created", not "completed"...
// I don't do any find/getRepository/refresh here, so the entity should not be hydrated again
$status = $payment->getStatus();
}
为什么会出现这种情况?我在 Symfony/API 平台 DataPersister 中执行此操作。
这种情况仅在生产中发生,我无法在我的电脑上重现此情况。
不同之处在于,在生产中我使用 k8s 集群作为应用程序,使用 MySQL 集群作为数据库。
我想到了数据库副本问题,但是,由于我没有在方法中进行任何查询,所以不可能(这是一个非常简单的方法,只需检查付款状态)。
冲水之前为什么不坚持呢? 如https://symfony.com/doc/current/doctrine.html