Как в symfony обратиться к БД из статического класса?

В Symfony, для обращения к базе данных из статического класса, мы можем воспользоваться сервисом Doctrine.

Doctrine - это библиотека ORM (Object-Relational Mapping), которая предоставляет удобный способ взаимодействия с базой данных в Symfony.

Для начала необходимо установить и настроить Doctrine в вашем проекте Symfony. Это можно сделать, следуя официальной документации Symfony.

После установки и настройки Doctrine, вам понадобится получить контейнер сервисов Symfony. В статическом классе это можно сделать, вызвав метод getContainer():

use SymfonyComponentDependencyInjectionContainerAwareInterface;
use SymfonyComponentDependencyInjectionContainerAwareTrait;

class StaticClass implements ContainerAwareInterface
{
    use ContainerAwareTrait;

    public static function doSomething()
    {
        $doctrine = self::$container->get('doctrine');
        
        // Доступ к EntityManager
        $entityManager = $doctrine->getManager();
        
        // Доступ к репозиторию
        $userRepository = $entityManager->getRepository(User::class);
        
        // Взаимодействие с базой данных
        $users = $userRepository->findAll();

        // ...
    }
}

В приведенном коде используется интерфейс ContainerAwareInterface и трейт ContainerAwareTrait, которые позволяют получить доступ к контейнеру сервисов Symfony.

Далее мы получаем сервис Doctrine, вызывая $container->get('doctrine'). Используя сервис Doctrine, мы можем получить доступ к EntityManager и репозиториям.

EntityManager предоставляет методы для взаимодействия с базой данных, такие как persist(), flush(), remove(), find(), getRepository(), и так далее.

Репозиторий - это объект, который предоставляет удобные методы для выполнения запросов к базе данных, используя язык запросов Doctrine (DQL).

Обратите внимание, что в Symfony рекомендуется использовать внедрение зависимостей (Dependency Injection) для получения доступа к сервисам. Разрешение зависимостей через контейнер сервисов Symfony - более лучшая практика, чем использование статических классов.