Метод set класса QueryBuilder
Метод set класса QueryBuilder используется
для построения UPDATE-запросов. Первым параметром
передаётся имя поля (или SQL-выражение), вторым -
новое значение. Метод возвращает сам объект
QueryBuilder, что позволяет выстраивать
цепочку вызовов. Обычно set применяется
вместе с методами update и where.
Синтаксис
$qb->set(string $key, mixed $value);
Пример
Давайте обновим поле title у записи с id
равным 1:
<?php
namespace App\Repository;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\ORM\QueryBuilder;
class ArticleRepository
{
public function __construct(
private EntityManagerInterface $em
) {
}
public function updateTitle(int $id, string $title): QueryBuilder
{
$qb = $this->em->createQueryBuilder();
$qb->update('App\Entity\Article', 'a')
->set('a.title', ':title')
->where('a.id = :id')
->setParameter('title', $title)
->setParameter('id', $id);
return $qb;
}
}
?>
Результат выполнения метода вернёт объект
QueryBuilder, готовый к вызову
getQuery и execute.
Пример
Давайте обновим сразу несколько полей одной
записью, используя цепочку вызовов set:
<?php
namespace App\Repository;
use Doctrine\ORM\EntityManagerInterface;
class ArticleRepository
{
public function __construct(
private EntityManagerInterface $em
) {
}
public function updateArticle(int $id, string $title, string $text): int
{
$qb = $this->em->createQueryBuilder();
$qb->update('App\Entity\Article', 'a')
->set('a.title', ':title')
->set('a.text', ':text')
->where('a.id = :id')
->setParameter('title', $title)
->setParameter('text', $text)
->setParameter('id', $id);
return $qb->getQuery()->execute();
}
}
?>
Результат выполнения кода для обновления одной записи:
1
Пример
Давайте передадим в метод set готовое
SQL-выражение вместо параметра-заглушки:
<?php
namespace App\Repository;
use Doctrine\ORM\EntityManagerInterface;
class ArticleRepository
{
public function __construct(
private EntityManagerInterface $em
) {
}
public function incrementViews(int $id): int
{
$qb = $this->em->createQueryBuilder();
$qb->update('App\Entity\Article', 'a')
->set('a.views', 'a.views + 1')
->where('a.id = :id')
->setParameter('id', $id);
return $qb->getQuery()->execute();
}
}
?>
Результат выполнения кода для одной записи:
1
Смотрите также
-
класс
QueryBuilder,
который строит DQL-запросы в Doctrine -
метод
update,
который начинает UPDATE-запрос -
метод
where,
который задаёт условие выборки -
метод
setParameter,
который привязывает значение к параметру