【发布时间】:2018-10-30 23:58:29
【问题描述】:
我观察到我的教义对象的奇怪行为。在我的 symfony 项目中,我使用 ORM 和学说将我的数据保存在 mysql 数据库中。这在大多数情况下都正常工作。我也在我的项目中使用了 gearman,这是一个允许应用程序并行完成任务的框架。我有一个gearman job-server 在运行我的apache 的同一台机器上运行,并且我使用screen 窗口管理器在单独的“屏幕”会话中在同一台机器上注册了一个齿轮工作人员。通过这种方法,我总是可以通过为 gearman-worker 注册的功能访问标准控制台。
在我正在调用的 gearman-worker 函数中,我可以通过 $doctrine = $this->getContainer()->get('doctrine') 访问学说对象,它几乎可以正常工作。但是当我更改了数据库中的一些数据时,教义仍然使用以前存储在数据库中的旧数据。我很困惑,因为我期望通过调用:
$repo = $doctrine->getRepository("PackageManagerBundle:myRepo");
$dbElement = $repo->findOneById($Id);
我总是从我的数据库中获取当前的数据条目。这看起来像是一种奇怪的缓存行为,但我不知道我做错了什么。
我可以通过注册 gearman worker 和新函数来解决这个问题:
$worker = new \GearmanWorker();
$worker->addServer();
$worker->addFunction
之后,我恢复了数据库的当前状态,直到我更改了其他内容。我只在我的 gearman worker 函数中观察到这种行为。在应用程序的其余部分,一切都与我的数据库同步并且正常。
【问题讨论】:
-
在使用之前尝试刷新对象引用,例如
$doctrine->refresh($object)
标签: php mysql doctrine-orm gearman symfony-3.2