Symfony 2 Получить доступ к Entity Manager из static (статического) метода

Для получения доступа к Entity Manager из статического (static) метода, что позводин нам использовать произвольный sql запрос. На самом деле все довольно просто, необходимо в любой из Бандлов (Bundle) добавить следующие методы:


class AcmeDemoBundle extends Bundle
{
    private static $containerInstance = null;

    public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null)
    {
        parent::setContainer($container);
        self::$containerInstance = $container;
    }

    public static function getContainer()
    {
        return self::$containerInstance;
    }
}
и затем в нужном нам методе, использовать например такой код:

static function getData($id) {

//Получаем объект EntityManager
$em = WyngspanBundle::getContainer()->get('doctrine')->getManager();
        /** @var $em EntityManager */

//используем например в получении данных о пользователе
$user = $em->getRepository('Users')->find($id);

//или чистый sql запрос
$where = ' WHERE id= '.$id
$sql = '
            SELECT id, name
            FROM users'
            . $where;
        $query = $em->getConnection()->query($sql);

        $user= $query->fetchAll();;

         return $user;
}
Также можно использовать QueryBuldier, DQL и т д, все что душе угодно...
Теги: Symfony
Новости