В моем проекте symfony у меня есть два объекта, которые связаны между собой от одного до многих. мне нужно найти первый и последний ребенок, поэтому я использую функцию хранилища, которые выглядят следующим образом:Symfony Doctrine отключить кеш
public function getFirstPost(Topic $topic)
{
$query = $this->createQueryBuilder('t')
->addSelect('p')
->join('t.posts', 'p')
->where('t.id = :topic_id')
->setParameter('topic_id' => $topic->getId())
->orderBy('p.id', 'ASC')
->setMaxResults(1)
->getQuery();
return $query->getOneOrNullResult();
}
public function getLastPost(Topic $topic)
{
$query = $this->createQueryBuilder('t')
->addSelect('p')
->join('t.posts', 'p')
->where('t.id = :topic_id')
->setParameter('topic_id' => $topic->getId())
->orderBy('p.id', 'DESC')
->setMaxResults(1)
->getQuery();
return $query->getOneOrNullResult();
}
Таким образом, единственное отличие заключается в в ->orderBy()
, за первый пост я использую ASC и последний Я использую DESC.
Теперь, если я использую одну из этих функций от своего контроллера, возвращаю ожидаемый результат и работаю нормально. Но если я запускаю их обоих одновременно с моим контроллером, они возвращают тот же результат, которого они не должны.
Я полагаю, что доктрина тайно кэширует эти запросы и результаты, и поэтому возвращение одинаково, поэтому я попытался использовать $query->useResultCache(false)
, но ничего не сделал.
Итак, мой вопрос: почему это происходит и как я могу это исправить?
Вы уверены, что есть не только один пост в прошедшей теме? –
Да, тема, на которую я тестирую, имеет первого ребенка Id 17 и последний ребенок Id 23 и содержит всего 4 детей в целом – Kable