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

Метод refresh

Метод refresh класса EntityManager предназначен для принудительного обновления состояния сущности в Unit of Work из базы данных. Он принимает первым параметром объект сущности, который необходимо обновить. Метод выполняет SQL-запрос к базе данных и перезаписывает значения полей переданного объекта актуальными данными из БД. Это полезно, когда данные в базе были изменены другим процессом или когда требуется откатить изменения, сделанные в объекте без вызова flush.

Синтаксис

public function refresh(object $entity): void

Пример

Давайте создадим сущность, сохраним её, а затем изменим поле в объекте и вызовем refresh, чтобы вернуть исходное значение из базы данных:

<?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/refresh', name: 'article_refresh')] public function refresh(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('article'); $article->setText('hello'); $em->persist($article); $em->flush(); $article->setTitle('changed title'); $em->refresh($article); return new Response($article->getTitle()); } } ?>

Результат выполнения кода:

"article"

Пример

Давайте рассмотрим ситуацию, когда данные в базе были изменены извне, и нам нужно получить актуальное значение:

<?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/sync', name: 'article_sync')] public function sync(EntityManagerInterface $em): Response { $article = $em->getRepository(Article::class)->find(1); // external process updates the title in the database $em->refresh($article); return new Response($article->getTitle()); } } ?>

Результат выполнения кода (после внешнего обновления):

"updated from db"

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

  • класс EntityManager,
    который управляет жизненным циклом сущностей
  • метод flush,
    который синхронизирует изменения с базой данных
  • метод find,
    который находит сущность по идентификатору
  • метод clear,
    который очищает Unit of Work от всех сущностей
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить