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