我有一个查询,该查询从数据库中提取多个项(行),并将其缓存一个小时。
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。这样做的另一种方法是基于餐馆构建缓存键,但是我需要用另一种方法发送所有餐馆的ID,这是无效的。
我不确定如何实现我想要的。我想指出,第一个方法/查询的结果需要缓存,因为查询非常昂贵。我当时以为该学说会有类似“每项”缓存的内容,但是如果删除了,我找不到它的文档。感谢您的提示。