如何从静态方法中使用doctrine

时间:2016-02-28 22:18:23

标签: symfony doctrine entitymanager

我总是使用来自控制器或实体存储库类的doctrine,现在我试图从静态类中使用它,但我找不到任何关于如何执行id的示例。 基本上我需要(我认为)一种在静态方法中创建实体管理器的方法。

感谢 中号

3 个答案:

答案 0 :(得分:3)

你可以调用一个setter函数,注入实体管理器,你可以调用静态方法:

<强> myController的

Class MyController extends Controller
{
    public function newAction()
    {
        $entityManager = $this->getDoctrine()->getManager();
        SomeClass::setEntityManager($entityManager);
        $result = SomeClass::myStaticMethod();
    }
}

SomeClass

Class SomeClass
{
    private static $entityManager;        

    public static function setEntityManager($entityManager)
    {
        self::$entityManager = $entityManager;
    }

    public static function myStaticMethod()
    {
        return $entityManager->getRepository(SomeEntity::class)->findAll();
    }
}

答案 1 :(得分:0)

我到这里来看看如何从Form内部查询数据库,以为我可能需要带有静态方法的自定义类。如果有人觉得这有用,我就知道我们可以从控制器将EntityManager传递给表单对象($ form = $ this-> createForm(TaskType :: class,$ task,['entity_manager'=> entityManager]))( https://symfony.com/doc/4.1/form/form_dependencies.html)。

答案 2 :(得分:-3)

我不确定你的问题是什么意思静态类/方法,一些代码示例可能会有所帮助。但是你可以将这个类声明为一个服务,听起来它可能就是这样,然后将实体管理器作为依赖注入。

services.yml

services:
    my_service:
        class: Acme\AppBundle\Services\MyService
        arguments: ["@doctrine.orm.entity_manager"]

然后在你的班级中你将拥有这样的实体经理:

<?php

namespace Acme\AppBundle\Services;

use Doctrine\ORM\EntityManager;

class MyService
{

    /**
    * Entity Manager
    *
    * @var Doctrine\ORM\EntityManager
    */
    protected $em;

    public function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    ...
}

然后您可以在控制器中使用此服务,如下所示:

$this->get('my_service')->doSomething();