Ответ
Нет, Symfony не обязывает использовать Doctrine. Это гибкий фреймворк, где Doctrine ORM — это рекомендуемый, но заменяемый компонент. Я работал с проектами, где использовались другие подходы к работе с базой данных.
Альтернативы Doctrine в Symfony:
- Eloquent ORM (из Laravel): Можно интегрировать через пакет
illuminate/database. Это удобно, если команда больше знакома с синтаксисом Eloquent. - Чистый PDO: Для высоконагруженных или очень специфичных запросов, где нужен полный контроль.
- Другие библиотеки: Например,
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 легко инжектирует такие кастомные сервисы.