Метод delete
Метод delete класса QueryBuilder формирует
запрос на удаление записей. Первым параметром
передаётся имя сущности (алиас), из которой нужно
удалить данные. Метод возвращает объект
QueryBuilder, поэтому его можно объединять
в цепочку с другими методами, например, с where
или setParameter.
Важно: метод delete создаёт DQL-запрос, который
нельзя выполнить напрямую через execute без
предварительного вызова getQuery.
Синтаксис
$qb->delete(string $entity)
Пример
Давайте удалим все записи из сущности Article:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function deleteAll(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->delete(Article::class);
$query = $qb->getQuery();
$query->execute();
return new Response('All articles deleted');
}
}
?>
Результат выполнения кода:
"All articles deleted"
Пример
Давайте удалим только те записи, у которых поле
status равно 'draft':
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function deleteDrafts(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$qb->delete(Article::class, 'a')
->where('a.status = :status')
->setParameter('status', 'draft');
$query = $qb->getQuery();
$query->execute();
return new Response('Drafts deleted');
}
}
?>
Результат выполнения кода:
"Drafts deleted"
Пример
Давайте удалим записи, созданные раньше определённой даты:
<?php
namespace AppController;
use AppEntityArticle;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ArticleController extends AbstractController
{
public function deleteOld(EntityManagerInterface $em): Response
{
$qb = $em->createQueryBuilder();
$date = new DateTime('2020-01-01');
$qb->delete(Article::class, 'a')
->where('a.createdAt < :date')
->setParameter('date', $date);
$query = $qb->getQuery();
$query->execute();
return new Response('Old articles deleted');
}
}
?>
Результат выполнения кода:
"Old articles deleted"
Смотрите также
-
класс
QueryBuilder,
который создаёт DQL-запросы -
метод
where,
который задаёт условие выборки -
метод
setParameter,
который привязывает значение к параметру -
метод
getQuery,
который возвращает объект Query для выполнения