Як використовувати DBAL Doctrine

Дата оновлення перекладу 2023-09-04

Як використовувати DBAL Doctrine

Note

Ця стаття присвячена DBAL Doctrine. Зазвичай ви будете працювати з вищим рівнем ORM Doctrine, який просто використовує DBAL за лаштунками, щоб спілкуватися з базою даних. Щоб дізнатися більше про Doctrine ORM, див. "Бази даних та Doctrine ORM".

Doctrine DBAL (Шар абстракції бази даних) - це шар абстракції, який працює над PDO і пропонує інтуїтивно зрозумілий та гнучкий API для комунікації з найбільш популярними реляційними базами даних. Бібліотека DBAL дозволяє вам писати запити незалежно від ваших моделей ORM, наприклад, для побудови звітів або прямої маніпуляції даними.

Tip

Прочитайте офіційну Документацію DBAL Doctrine, щоб дізнатися всі деталі та можливості бібліотеки Doctrine DBAL.

Спочатку встановіть Doctrine orm Symfony pack :

1
$ composer require symfony/orm-pack

Потім налаштуйте змінну середовища DATABASE_URL в .env:

1
2
3
4
# .env (або перевизначте DATABASE_URL в .env.local, щоб уникнути відправлення змін)

# налаштуйте цей рядок!
DATABASE_URL="mysql://db_user:db_password@127.0.0.1:3306/db_name"

Детальніше можна налаштувати в config/packages/doctrine.yaml - див. . Видаліть ключ orm в цьому файлі, якщо ви не хочете використовувати Doctrine ORM.

Для отримання доступу до з'єднання DBAL, підключіть об'єкт Connection:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// src/Controller/UserController.php
namespace App\Controller;

use Doctrine\DBAL\Connection;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;

class UserController extends AbstractController
{
    public function index(Connection $connection): Response
    {
        $users = $connection->fetchAllAssociative('SELECT * FROM users');

        // ...
    }
}

Це передасть вам сервіс database_connection.

Реєстрація користувацьких типів відображення

Ви можете зареєструвати свої типи відображення через конфігурацію Symfony. Вони будуть додані до всіх з'єднань, які вже були сконфігуровані. Щоб дізнатися більше інформації про користувацькі типи відображення, прочитайте розділ документації Doctrine Користувацькі типи відображення.

1
2
3
4
5
6
# config/packages/doctrine.yaml
doctrine:
    dbal:
        types:
            custom_first:  App\Type\CustomFirst
            custom_second: App\Type\CustomSecond

Реєстрація користувацький типів відображення в SchemaTool

SchemaTool використовується для дослідження баз даних та їх порівняння зі схемою. Щоб виконати це завдання, SchemaTool має знати, який тип відображення необхідно використати для кожного типу бази даних. Реєстрація нових можлива через конфігурацію.

Тепер, наведіть тип ENUM (який не підтримується DBAL за замовчуванням) в string за допомогою типу відображення:

1
2
3
4
5
# config/packages/doctrine.yaml
doctrine:
    dbal:
        mapping_types:
            enum: string