Я стремлюсь найти ответы, прежде чем мне нужно разместить здесь вопрос, но сегодня я не могу понять, что не так.
Мы используем Doctrine 2.1.2 в приложении Symfony 2, а в репозитории у нас есть два метода, которые используют практически один и тот же запрос.
Единственное различие между методом A и методом B состоит в том, что в JOIN добавлено условие, общее для обоих запросов.
Проблема в том, что Doctrine, похоже, использует один и тот же кэш результатов для обоих запросов.
Когда мы вызываем метод A, метод B использует кэш из A, и наоборот.
Я использовал expireResultCache (true) и useResultCache (false), но безрезультатно.
Вот как выглядят запросы:
-- method A
SELECT DISTINCT a, b, c FROM MyBundle:ObjectA a INDEX BY a.id
LEFT JOIN a.fkObjectB b
LEFT JOIN a.fkObjectC c
-- method B
SELECT DISTINCT a, b, c FROM MyBundle:ObjectA a INDEX BY a.id
LEFT JOIN a.fkObjectB b WITH b.some_field IS NULL
LEFT JOIN a.fkObjectC c
Когда я использую getSQL (), я вижу, что они приводят к различным запросам, как и ожидалось. Сгенерированные запросы, когда они выполняются независимо в базе данных, генерируют разные результаты.
Это наводит меня на мысль, что это может быть досадная ошибка кэширования результатов, когда Doctrine не кэширует условия для JOIN, а только имена таблиц.
Это ошибка, или я могу что-то сделать?
РЕДАКТИРОВАТЬ Все еще происходит в Учении 2.1.6.