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

Метод detach

Метод detach класса EntityManager открепляет переданную сущность от Doctrine. После этого менеджер сущностей перестаёт отслеживать изменения этой сущности: они больше не попадут в базу данных при вызове метода flush. При этом сама сущность остаётся обычным PHP-объектом, и вы можете продолжать работать с её свойствами. Первым параметром передаётся сущность, которую нужно открепить.

Синтаксис

$em->detach(object $entity)

Пример

Давайте открепим сущность статьи от менеджера сущностей и проверим, отслеживается ли она ещё с помощью метода contains:

<?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/detach', name: 'article_detach')] public function detach(EntityManagerInterface $em): Response { $article = new Article(); $article->setTitle('abcde'); $article->setText('article'); $em->persist($article); $before = $em->contains($article); $em->detach($article); $after = $em->contains($article); return new Response(var_export([$before, $after], true)); } } ?>

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

[true, false]

Пример

Давайте убедимся, что после открепления изменения сущности не сохраняются в базу данных. Сначала найдём статью, изменим её заголовок и открепим, а затем сравним заголовок в базе с новым значением:

<?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/detach-update', name: 'article_detach_update')] public function detachUpdate(EntityManagerInterface $em): Response { $article = $em->find(Article::class, 1); $article->setTitle('hello'); $em->detach($article); $em->flush(); $em->clear(); $fresh = $em->find(Article::class, 1); return new Response($fresh->getTitle()); } } ?>

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

"abcde"

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

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