Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在服务symfony 4中使用多实体管理器_Symfony_Doctrine - Fatal编程技术网

如何在服务symfony 4中使用多实体管理器

如何在服务symfony 4中使用多实体管理器,symfony,doctrine,Symfony,Doctrine,我在doctor.yml中设置了两个实体经理 我必须将存储库注入到服务中,但问题是存储库始终采用默认的实体管理器。 我应该如何为存储库指定特定的实体管理器。 在symfony 4中,我们可以使用ServiceEntityRepository将存储库视为服务,而不是惰性/自动加载它们,您需要将每个存储库设置为命名服务并在services.yaml文件中。而不是惰性/自动加载它们,您需要在services.yaml文件中将每个服务设置为命名服务。您可以尝试在构造中注入条令\Common\Persis

我在doctor.yml中设置了两个实体经理 我必须将存储库注入到服务中,但问题是存储库始终采用默认的实体管理器。 我应该如何为存储库指定特定的实体管理器。
在symfony 4中,我们可以使用ServiceEntityRepository将存储库视为服务,而不是惰性/自动加载它们,您需要将每个存储库设置为命名服务并在services.yaml文件中。

而不是惰性/自动加载它们,您需要在services.yaml文件中将每个服务设置为命名服务。

您可以尝试在构造中注入条令\Common\Persistence\manager注册表。然后使用$managerRegistry->getManager'your_connection_name'

例如:

//use Doctrine\Common\Persistence\ManagerRegistry;
private $connection;
function __construct(ManagerRegistry $em)
{
    $this->connection = $em->getManager('your_connection_name');
}
您可以尝试在构造中注入条令\Common\Persistence\ManagerRegistry。然后使用$managerRegistry->getManager'your_connection_name'

例如:

//use Doctrine\Common\Persistence\ManagerRegistry;
private $connection;
function __construct(ManagerRegistry $em)
{
    $this->connection = $em->getManager('your_connection_name');
}

那么您在多个管理器中映射了相同的实体?这确实是使用ServiceEntityRepository的一个问题。检查构造函数,您将看到使用了映射实体的第一个管理器。如果存储库知道使用哪个管理器,您可以编写自己的构造函数。或者你可以用老式的方式使用工厂。不是同一个实体,我有不同的实体供不同的经理使用。使用工厂定义旧的时尚方式是可行的。Thanksmit希望再次检查您的映射。如果给定的实体仅映射到一个实体管理器中,那么现成的ServiceEntityRepository将起作用。我怀疑您可能在没有意识到的情况下有多个映射,这可能会导致将来出现意外行为。那么您在多个管理器中映射了相同的实体?这确实是使用ServiceEntityRepository的一个问题。检查构造函数,您将看到使用了映射实体的第一个管理器。如果存储库知道使用哪个管理器,您可以编写自己的构造函数。或者你可以用老式的方式使用工厂。不是同一个实体,我有不同的实体供不同的经理使用。使用工厂定义旧的时尚方式是可行的。Thanksmit希望再次检查您的映射。如果给定的实体仅映射到一个实体管理器中,那么现成的ServiceEntityRepository将起作用。我怀疑您可能在没有意识到的情况下有多个映射,这可能会导致将来出现意外的行为。您对Symfony 4的更新在一般服务中不起作用-$this->getDoctrine不会因为您插入了实体管理器而神奇地导入。您提供的文档显示的是扩展AbstractController的控制器,该控制器利用ControllerTrait,该ControllerTrait具有执行$this->container->get'doctor'的getDoctrine助手方法。您对Symfony 4的更新在一般服务中不起作用-$this->getDoctrine并不是因为您注入了实体管理器而神奇地导入的。您提供的文档显示的是扩展AbstractController的控制器,该控制器利用ControllerTrait,该ControllerTrait具有执行$this->container->get'doctor'的getdoctor助手方法