Метод update
Метод update класса QueryBuilder
создаёт DQL-запрос на обновление записей
в базе данных. Первым параметром передаётся
имя сущности, которую нужно обновить.
Далее цепочкой вызывается метод set,
который задаёт новые значения полей,
и метод where, который ограничивает
набор обновляемых записей.
Синтаксис
$qb->update(className)
Пример
Давайте обновим поле text у всех записей сущности Article:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function updateAllText(): void
{
$qb = $this->createQueryBuilder('a');
$qb->update(Article::class)
->set('a.text', ':text')
->setParameter('text', 'abcde');
$qb->getQuery()->execute();
}
}
?>
Пример
Давайте обновим поле text только у записи с заданным id:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function updateTextById(int $id): void
{
$qb = $this->createQueryBuilder('a');
$qb->update(Article::class)
->set('a.text', ':text')
->where('a.id = :id')
->setParameter('text', 'hello')
->setParameter('id', $id);
$qb->getQuery()->execute();
}
}
?>
Пример
Давайте обновим сразу несколько полей: text и integer:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function updateTextAndInteger(int $id): void
{
$qb = $this->createQueryBuilder('a');
$qb->update(Article::class)
->set('a.text', ':text')
->set('a.integer', ':integer')
->where('a.id = :id')
->setParameter('text', 'abcde')
->setParameter('integer', 5)
->setParameter('id', $id);
$qb->getQuery()->execute();
}
}
?>
Пример
Давайте посмотрим DQL-запрос, который строит метод update:
<?php
namespace App\Repository;
use App\Entity\Article;
use Doctrine\ORM\EntityRepository;
class ArticleRepository extends EntityRepository
{
public function showDQL(): void
{
$qb = $this->createQueryBuilder('a');
$qb->update(Article::class)
->set('a.text', ':text')
->where('a.id = :id')
->setParameter('text', 'abcde')
->setParameter('id', 1);
echo $qb->getDQL();
}
}
?>
Результат выполнения кода:
"UPDATE App\Entity\Article a SET a.text = :text WHERE a.id = :id"
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы -
метод
set,
который задаёт новые значения полей -
метод
where,
который ограничивает набор обновляемых записей -
метод
delete,
который создаёт DQL-запрос на удаление записей