Доктрина 1.2: Отключение кэширования - PullRequest
4 голосов
/ 21 июня 2011

Подобно этому вопросу, у меня возникли некоторые проблемы с тем, как доктрина кэширует / гидратирует отношения результата моего запроса.

Теперь я знаю, что могу исправить проблему, вызвав refresh / refreshRelated, но есть ли способ отключить кэш гидратации для таблицы / временно? Особенно при использовании объединений в select, так что пример кода становится:

$result2 = Doctrine_Query::create()
           ->leftJoin('s.School sc')
           ->from('Student s')
           ->execute();

вы действительно хотите, чтобы Doctrine использовала данные из вашего объединения вместо использования кэшированного гидратированного результата из предыдущего выбора.

Есть ли способ сделать это?

Заранее спасибо!

Ответы [ 2 ]

2 голосов
/ 23 июня 2011

Я думаю, что по умолчанию это должно совпадать с результатом запроса, если вы не изменили Doctrine_Core::ATTR_HYDRATE_OVERWRITE.Вы можете проверить значение с помощью:

$doctrineManager = Doctrine_Manager::getInstance();
$val = $doctrineManager->getAttribute(Doctrine::ATTR_HYDRATE_OVERWRITE); 

. Когда вы вызываете refresh (), он возвращает это значение в true, и снова выполняет запрос, а затем восстанавливает настройку.Если ваш случай окажется ложным, вы можете изменить его на $doctrineManager->setAttribute

0 голосов
/ 14 декабря 2011

Я думаю, что ваше решение с refreshRelated нормальное, но если вам не нужны эти элементы в кеше.Вы можете установить

Doctrine_Manager::connection()->setAttribute(Doctrine_Core::ATTR_AUTO_FREE_QUERY_OBJECTS, true );

. Таким образом, Doctrine будет автоматически вызывать free () для каждого запроса в конце, поэтому он не будет кэшировать свой результат, а также будет держать объем памяти немного ниже.*

...