Метод remove
Метод remove класса EntityManager
помечает переданную сущность на удаление.
Первым параметром передаётся объект сущности,
который нужно удалить из базы данных. Сам по
себе метод remove не выполняет SQL-запрос
DELETE сразу - он лишь помещает сущность в
очередь на удаление. Чтобы изменения попали в
базу данных, после вызова remove необходимо
вызвать метод flush того же менеджера сущностей.
Синтаксис
$em->remove($entity);
Пример
Давайте удалим сущность Article с идентификатором 1:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function delete(EntityManagerInterface $em): Response
{
$article = $em->find(Article::class, 1);
$em->remove($article);
$em->flush();
return new Response('deleted');
}
}
?>
Результат выполнения кода:
"deleted"
Пример
Давайте удалим сущность, полученную из репозитория:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function delete(EntityManagerInterface $em): Response
{
$repository = $em->getRepository(Article::class);
$article = $repository->find(1);
$em->remove($article);
$em->flush();
return new Response('article removed');
}
}
?>
Результат выполнения кода:
"article removed"
Пример
Давайте удалим несколько сущностей за один вызов flush:
<?php
namespace App\Controller;
use App\Entity\Article;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function delete(EntityManagerInterface $em): Response
{
$repository = $em->getRepository(Article::class);
$articles = $repository->findBy(['active' => false]);
foreach ($articles as $article) {
$em->remove($article);
}
$em->flush();
return new Response('removed');
}
}
?>
Результат выполнения кода:
"removed"
Смотрите также
-
класс
EntityManager,
который управляет сущностями и их состоянием -
метод
persist,
который помечает сущность на сохранение -
метод
flush,
который применяет изменения к базе данных -
метод
find,
который находит сущность по идентификатору