Метод createQueryBuilder класса Connection
Метод createQueryBuilder класса Connection
создаёт и возвращает объект QueryBuilder.
Он позволяет строить SQL-запрос по частям:
задавать выборку, таблицу, условия, сортировку
и лимит. Первым параметром передаётся псевдоним
таблицы, вторым - сама таблица. Метод доступен
как в миграциях, так и в сервисах, куда внедряется
соединение с базой данных.
Синтаксис
public function createQueryBuilder(string $alias, string $table): QueryBuilder
Пример
Давайте создадим конструктор запроса и выберем
все строки из таблицы article:
<?php
namespace App\Controller;
use Doctrine\DBAL\Connection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(Connection $connection): Response
{
$qb = $connection->createQueryBuilder();
$qb->select('*')
->from('article', 'a');
$res = $qb->fetchAllAssociative();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"id":"1","title":"article 1"},{"id":"2","title":"article 2"}]
Пример
Давайте добавим условие отбора через метод where
и отсортируем результат:
<?php
namespace App\Controller;
use Doctrine\DBAL\Connection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
class ArticleController extends AbstractController
{
public function index(Connection $connection): Response
{
$qb = $connection->createQueryBuilder();
$qb->select('id', 'title')
->from('article', 'a')
->where('a.id > :id')
->setParameter('id', 1)
->orderBy('a.title', 'ASC')
->setMaxResults(10);
$res = $qb->fetchAllAssociative();
return new Response(json_encode($res));
}
}
?>
Результат выполнения кода:
[{"id":"2","title":"article 2"}]
Пример
Давайте используем конструктор запроса внутри миграции для обновления данных:
<?php
namespace App\Migrations;
use Doctrine\DBAL\Schema\Schema;
use Doctrine\Migrations\AbstractMigration;
class Version20240101000000 extends AbstractMigration
{
public function up(Schema $schema): void
{
$qb = $this->connection->createQueryBuilder();
$qb->update('article', 'a')
->set('a.title', ':title')
->where('a.id = :id')
->setParameter('title', 'article')
->setParameter('id', 1);
$qb->executeStatement();
}
public function down(Schema $schema): void
{
}
}
?>
Результат выполнения кода:
"article"
Смотрите также
-
класс
Connection,
который представляет соединение с базой данных -
метод
executeQuery,
который выполняет SELECT-запрос -
метод
executeStatement,
который выполняет INSERT, UPDATE или DELETE -
метод
fetchAllAssociative,
который возвращает все строки выборки