Использовали ли вы Symfony только с Doctrine?

«Использовали ли вы Symfony только с Doctrine?» — вопрос из категории Symfony, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, Symfony не обязывает использовать Doctrine. Это гибкий фреймворк, где Doctrine ORM — это рекомендуемый, но заменяемый компонент. Я работал с проектами, где использовались другие подходы к работе с базой данных.

Альтернативы Doctrine в Symfony:

  1. Eloquent ORM (из Laravel): Можно интегрировать через пакет illuminate/database. Это удобно, если команда больше знакома с синтаксисом Eloquent.
  2. Чистый PDO: Для высоконагруженных или очень специфичных запросов, где нужен полный контроль.
  3. Другие библиотеки: Например, Cycle ORM.

Пример использования Symfony с чистым PDO через сервис:

# config/services.yaml
services:
    AppServiceDatabaseConnection:
        arguments:
            $dsn: '%env(DATABASE_URL)%'
// src/Service/DatabaseConnection.php
namespace AppService;

class DatabaseConnection
{
    private PDO $connection;

    public function __construct(string $dsn)
    {
        $this->connection = new PDO($dsn);
        $this->connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    public function fetchAllUsers(): array
    {
        $stmt = $this->connection->query('SELECT * FROM users');
        return $stmt->fetchAll(PDO::FETCH_ASSOC);
    }
}

Когда это оправдано? В небольших микросервисах, где сложность ORM избыточна, или при работе с legacy-базами, где активная запись через ORM затруднена. Symfony Container легко инжектирует такие кастомные сервисы.