Метод getConnection
Метод getConnection класса EntityManager
возвращает объект соединения с базой данных
(Doctrine\DBAL\Connection). Через него можно
выполнять SQL-запросы напрямую, минуя ORM,
управлять транзакциями и получать параметры
подключения. Метод не принимает параметров
и всегда возвращает готовый объект соединения.
Синтаксис
$connection = $entityManager->getConnection();
Пример
Давайте получим соединение и выполним простой
SQL-запрос через метод executeQuery:
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article', name: 'article_index')]
public function index(EntityManagerInterface $em): Response
{
$connection = $em->getConnection();
$res = $connection->executeQuery('SELECT 1 + 1 AS result')->fetchOne();
return new Response((string) $res);
}
}
?>
Результат выполнения кода:
2
Пример
Давайте вытащим список статей напрямую через SQL-запрос и вернём их в виде массива:
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/articles', name: 'article_list')]
public function list(EntityManagerInterface $em): JsonResponse
{
$connection = $em->getConnection();
$res = $connection->executeQuery(
'SELECT id, title FROM article ORDER BY id'
)->fetchAllAssociative();
return $this->json($res);
}
}
?>
Результат выполнения кода:
[
["id" => 1, "title" => "article 1"],
["id" => 2, "title" => "article 2"],
["id" => 3, "title" => "article 3"]
]
Пример
Давайте вставим новую запись через метод
executeStatement:
<?php
namespace App\Controller;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ArticleController extends AbstractController
{
#[Route('/article/create', name: 'article_create')]
public function create(EntityManagerInterface $em): Response
{
$connection = $em->getConnection();
$res = $connection->executeStatement(
'INSERT INTO article (title, content) VALUES (?, ?)',
['article', 'text']
);
return new Response((string) $res);
}
}
?>
Результат выполнения кода (количество затронутых строк):
1
Смотрите также
-
класс
EntityManager,
который управляет сущностями Doctrine -
метод
persist,
который ставит сущность в очередь на сохранение -
метод
flush,
который сбрасывает изменения в базу данных -
метод
beginTransaction,
который начинает транзакцию