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

Класс Connection

Класс Connection представляет собой соединение с базой данных. Он позволяет выполнять SQL-запросы напрямую, управлять транзакциями, вставлять, обновлять и удалять записи, а также получать данные в различных форматах. Экземпляр класса доступен через сервис Doctrine\DBAL\Connection, который можно внедрить в контроллер или сервис через механизм autowiring.

Синтаксис

use Doctrine\DBAL\Connection; public function __construct(Connection $connection) { $this->connection = $connection; }

Пример

Давайте внедрим соединение в контроллер и выполним простой SQL-запрос:

<?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 { $res = $connection->fetchAllAssociative('SELECT * FROM article'); return new Response(json_encode($res)); } } ?>

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

[["id" => 1, "title" => "article 1"], ["id" => 2, "title" => "article 2"]]

Пример

Давайте выполним запрос с параметрами, чтобы безопасно подставить значение:

<?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 show(Connection $connection): Response { $res = $connection->fetchAssociative( 'SELECT * FROM article WHERE id = ?', [1] ); return new Response(json_encode($res)); } } ?>

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

["id" => 1, "title" => "article 1"]

Пример

Давайте выполним вставку записи и получим её идентификатор:

<?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 create(Connection $connection): Response { $connection->insert('article', [ 'title' => 'abcde', 'content' => 'hello' ]); $res = $connection->lastInsertId(); return new Response((string) $res); } } ?>

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

"3"

Пример

Давайте обернём несколько запросов в транзакцию:

<?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 transfer(Connection $connection): Response { $connection->beginTransaction(); try { $connection->update('article', ['title' => 'user'], ['id' => 1]); $connection->update('article', ['title' => 'abcde'], ['id' => 2]); $connection->commit(); } catch (\Exception $e) { $connection->rollBack(); } return new Response('done'); } } ?>

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

"done"

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

  • метод executeQuery,
    который выполняет SQL-запрос и возвращает результат
  • метод executeStatement,
    который выполняет SQL-запрос без возврата результата
  • метод fetchAllAssociative,
    который возвращает все строки результата
  • метод beginTransaction,
    который начинает транзакцию
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить