Метод flush класса EntityManager
Метод flush класса EntityManager синхронизирует состояние объектов, находящихся под управлением Doctrine, с базой данных. Он выполняет все накопленные SQL-запросы (INSERT, UPDATE, DELETE), которые были запланированы после вызовов persist или remove. Метод не принимает обязательных параметров, но может принимать один объект сущности, чтобы ограничить область синхронизации.
Синтаксис
$em->flush($entity = null);
Пример
Давайте создадим сущность, сохраним её через persist и применим изменения к базе данных с помощью flush:
<?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/create', name: 'article_create')]
public function create(EntityManagerInterface $em): Response
{
$article = new Article();
$article->setTitle('article');
$article->setText('abcde');
$em->persist($article);
$em->flush();
return new Response('saved');
}
}
?>
Результат выполнения кода:
"saved"
Пример
Давайте обновим существующую сущность и сохраним изменения:
<?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/update/{id}', name: 'article_update')]
public function update(int $id, EntityManagerInterface $em): Response
{
$article = $em->getRepository(Article::class)->find($id);
if (!$article) {
return new Response('not found');
}
$article->setTitle('updated');
$em->flush();
return new Response('updated');
}
}
?>
Результат выполнения кода для существующей записи:
"updated"
Пример
Давайте удалим сущность и применим удаление к базе данных:
<?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/delete/{id}', name: 'article_delete')]
public function delete(int $id, EntityManagerInterface $em): Response
{
$article = $em->getRepository(Article::class)->find($id);
if (!$article) {
return new Response('not found');
}
$em->remove($article);
$em->flush();
return new Response('deleted');
}
}
?>
Результат выполнения кода:
"deleted"
Смотрите также
-
класс
EntityManager,
который управляет сущностями Doctrine -
метод
persist,
который планирует сохранение сущности -
метод
remove,
который планирует удаление сущности -
метод
find,
который находит сущность по идентификатору