Очистить кэшированную коллекцию, если она содержит определенный элемент в доктрине - PullRequest
0 голосов
/ 15 февраля 2019

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

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 .Другой способ сделать это - создать кеш-ключ на основе ресторанов, но мне нужно отправить все идентификаторы ресторанов другим способом, который неэффективен.

Я неуверен, как бы я достиг того, что я ищу.Я хотел бы отметить, что результаты первого метода / запроса должны быть кэшированы, так как запрос довольно дорогой.Я думал, что в доктрине есть что-то вроде кэша «на элемент», который я бы удалил, но если это так, я не могу найти документацию для него.Спасибо за советы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...