public function testInvalidateEntityQueries() { $key = 'test'; // cache a result and class $this->cache->registerQueryResult($this->entity, $key); $this->cache->registerQueryForEntity($this->entity, $key); // expire the entity queries: class key should be removed, entity key not $this->cache->invalidateEntityQueries($this->entity); $this->assertContains($key, $this->cache->getRegisteredKeys($this->entityCacheKey)); $this->assertNotContains($key, $this->cache->getRegisteredKeys($this->entityCacheClass)); }
/** * @param Query $query * @param int|null $ttl * @param string|null $key * * @return array */ public function query(Query $query, $ttl = null, $key = null) { if (is_null($key)) { $key = $this->getQueryCacheKey($query); } if ($ttl !== false) { $query->useResultCache(true, $ttl, $key); } $hasKey = $this->cache->has($key); // load via entitymanager $res = $query->getResult(); // remember which queries contain these entities if (!empty($res) && $hasKey === false && $ttl !== false) { $this->cache->registerQueryForEntity($res[0], $key); foreach ($res as $entity) { $this->cache->registerQueryResult($entity, $key); } } return $res; }