У меня есть запрос, который выбирает несколько элементов (строк) из базы данных и кэширует его в течение часа .
public function getRatings(array $idRestaurants): array
{
return $this->createQueryBuilder('r')
->select('idRating as id', 'compensated as isCompensated')
->where('idRestaurant in (:idRestaurants)')
->setParameter('idRestaurants', $idRestaurants)
->getQuery()
->useQueryCache(true)
->useResultCache(true, 60 * 60)
->getResult(Query::HYDRATE_ARRAY);
}
Теперь я быЯ хотел бы очистить кеш после того, как я обновлю один из элементов, которые я извлекаю описанным выше способом.
public function compensateRating(int $idRating)
{
$rating = $this->entityManager->getRepository(Rating::class)
->findOneBy([ 'idRating' => $idRating ]);
$rating->setCompensated(true);
$this->entityManager->persist($rating);
$this->entityManager->flush();
return $rating->getCompensated();
}
Я думал о связывании результатов первого запроса с несколькими ключами (в кеше), нокажется, что он еще не объединен # 2668 .Другой способ сделать это - создать кеш-ключ на основе ресторанов, но мне нужно отправить все идентификаторы ресторанов другим способом, который неэффективен.
Я неуверен, как бы я достиг того, что я ищу.Я хотел бы отметить, что результаты первого метода / запроса должны быть кэшированы, так как запрос довольно дорогой.Я думал, что в доктрине есть что-то вроде кэша «на элемент», который я бы удалил, но если это так, я не могу найти документацию для него.Спасибо за советы.