РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
116 of 258 menu

Атрибут Cache

Атрибут Cache вешается на класс сущности и включает кеш второго уровня Doctrine. Первым параметром передаётся режим использования кеша (usage), вторым - область кеша (region). После включения кеша Doctrine хранит загруженные сущности в регионе и повторно не обращается к базе данных при их повторном запросе.

Синтаксис

#[Cache(usage: usage, region: region)]

Пример

Давайте включим кеш второго уровня для сущности Article в режиме чтения-записи:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Cache(usage: 'READ_WRITE', region: 'article_region')] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(type: 'string')] private string $title; #[ORM\Column(type: 'text')] private string $text; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } public function setTitle(string $title): self { $this->title = $title; return $this; } public function getText(): string { return $this->text; } public function setText(string $text): self { $this->text = $text; return $this; } } ?>

После запроса сущности по идентификатору Doctrine положит её в регион article_region. Повторный запрос той же сущности вернёт данные из кеша.

Пример

Давайте включим кеш в режиме только чтения:

<?php namespace App\Entity; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity] #[ORM\Cache(usage: 'READ_ONLY')] class Article { #[ORM\Id] #[ORM\GeneratedValue] #[ORM\Column] private ?int $id = null; #[ORM\Column(type: 'string')] private string $title; public function getId(): ?int { return $this->id; } public function getTitle(): string { return $this->title; } } ?>

В режиме READ_ONLY сущность после первого чтения кешируется и больше не обновляется из базы данных. Такой режим подходит для справочников, которые не меняются во время работы приложения.

Пример

Давайте настроим регион кеша и выполним запрос:

<?php namespace App\Controller; use App\Entity\Article; use Doctrine\ORM\EntityManagerInterface; use Symfony\Bundle\FrameworkBundle\Controller\AbstractController; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Routing\Attribute\Route; class ArticleController extends AbstractController { #[Route('/article/{id}', name: 'article_show')] public function show(int $id, EntityManagerInterface $em): Response { $repository = $em->getRepository(Article::class); $article = $repository->find($id); return new Response($article->getTitle()); } } ?>

Первый вызов метода find выполнит SQL-запрос и положит результат в кеш. Второй вызов вернёт сущность из региона без обращения к базе данных.

Смотрите также

  • атрибут Entity,
    который помечает класс как сущность Doctrine
  • атрибут Table,
    который задаёт имя таблицы для сущности
  • атрибут Id,
    который помечает поле первичным ключом
  • атрибут GeneratedValue,
    который включает автоинкремент для первичного ключа
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить