Я заметил странное поведение моего объекта доктрины. В моем проекте Symfony я использую ORM с доктриной для сохранения своих данных в базе данных mysql. Это нормально работает в большинстве ситуаций. Я также использую gearman в своем проекте, это фреймворк, который позволяет приложениям выполнять задачи параллельно. У меня есть сервер заданий Gearman, работающий на той же машине, где также работает мой Apache, и я зарегистрировал работника Gearman. на той же машине в отдельном сеансе screen с помощью оконного менеджера screen. По этому методу у меня всегда есть доступ к штатной консоли из функции, прописанной для шестерёнки-рабочей.
В функции gearman-worker, которую я вызываю, у меня есть доступ к объекту доктрины через $doctrine = $this->getContainer()->get('doctrine')
, и он работает почти нормально. Но когда я изменил некоторые данные в своей базе данных, доктрина продолжает использовать старые данные, которые ранее хранились в базе данных. Я полностью сбит с толку, потому что ожидал этого, позвонив:
$repo = $doctrine->getRepository("PackageManagerBundle:myRepo");
$dbElement = $repo->findOneById($Id);
Я всегда получаю текущие записи данных из моей базы данных. Это похоже на странное поведение кэширования, но я понятия не имею, что я сделал не так.
Я могу решить эту проблему, зарегистрировав рабочего механизма и новую функцию:
$worker = new \GearmanWorker();
$worker->addServer();
$worker->addFunction
После этого я вернул текущее состояние моей базы данных, пока не изменю что-то еще. Я наблюдаю такое поведение только в моей рабочей функции Gearman. В остальном приложение все синхронизируется с моей базой данных и нормально.
$doctrine->refresh($object)
- person Matteo   schedule 21.05.2018