Когда мое приложение Symfony2 использует кеш, когда нет? Откуда мне знать?

Имея эту сущность:

/**
* @ORM\Entity
* @ORM\Table(name="nomencladores.pais", schema="nomencladores")
* @ORM\Entity(repositoryClass="AppBundle\Entity\Repository\PaisRepository")
* @UniqueEntity(fields={"nombre"}, message="El pais ya existe en nuestra base de datos")
*/
class Pais
{
use IdentifierAutogeneratedEntityTrait;
use NamedEntityTrait;
use ActiveEntityTrait;
}

И этот репозиторий:

class PaisRepository extends EntityRepository
{
public function getPaises()
{
$qb = $this->createQueryBuilder('pais');
$query = $qb->getQuery();
$query->useResultCache(true, 3600, 'paises_cache');

return $query->getResult();
}
}

И сделать этот вызов на моем контроллере:

/**
* @Route("/paises", name="paises")
* @Method("GET")
*/
public function getPaisAction()
{
$em = $this->getDoctrine()->getManager();
$entities = $em->getRepository('AppBundle:Pais')->getPaises();

$response['message'] = "";
$response['entities'] = [];

if (!$entities) {
$response['message'] = "No se encontraron países";
}

foreach ($entities as $pais) {
$paises = array();
$paises['id'] = $pais->getId();
$paises['text'] = $pais->getNombre();
$response['entities'][] = $paises;
}

return new JsonResponse($response);
}

И имея это в config_prod.yml файл:

doctrine:
orm:
metadata_cache_driver: apc
result_cache_driver: apc
query_cache_driver: apc

Как я узнаю, использует ли мое приложение результаты кэша или все время выполняет запрос к БД? Я вижу в панели инструментов Symfony2 (потому что я выполняю тестирование в среде разработки) и все время вижу запрос для paises таблица, которая заставляет меня думать, что кэш не используется.

0

Решение

Я считаю, что вы должны указать Doctrine, когда следует использовать настроенный драйвер кэширования, например:

public function getSomeEntities()
{
$qb = $this->createQueryBuilder('a');

$qb
->where('a.title = "test article"')
->orderBy('id', 'ASC')
;

$query = $qb->getQuery();

$query->useResultCache(true, 60, 'uniqueCacheId');

return $query->getResult();
}

Вы также можете указать использование кэширования запросов:

$query->useQueryCache(true);

Вы можете увидеть в Doctrine \ ORM \ Документация класса запросов что useQueryCache Функция принимает один логический параметр и useResultCache имеет следующие параметры:

useResultCache( boolean $bool, integer $timeToLive = null, string $resultCacheId = null )

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector