如何在Symfony 4.2中将Doctrine实体管理器标记为“惰性”

Arn*_*rne 6 php symfony doctrine-orm

寻找有关在重复的密钥异常后如何重置Doctrine实体管理器的解决方案之后,我发现此线程:实体管理器已关闭

答案之一提到该resetManager()方法,根据文档看来这是正确的: $em = $this->getDoctrine()->resetManager();

不幸的是,在致电时resetManager(),我得到以下提示:

不支持重置非延迟管理器服务。将“ doctrine.orm.default_entity_manager”服务设置为惰性,并在composer.json文件中要求“ symfony / proxy-manager-bridge”。

我已经安装了该软件包,但是找不到将默认管理器标记为惰性的方法。我已经尝试过services.yaml

doctrine.orm.default_entity_manager:
    lazy: true
Run Code Online (Sandbox Code Playgroud)

但这会导致进一步的错误。如何将默认实体管理器定义为惰性,而不必完全重新指定管理器?惰性服务的文档也没有真正帮助。

谢谢!

Arn*_*rne 6

正如 Cerad 在评论中所写,除了安装“symfony/proxy-manager-bridge”之外,不需要执行任何其他操作。剩下的事情将通过 Symfony 魔法来实现。

请注意,您不能再通过新管理器使用现有的实体存储库。因此,如果您之前已注入/自动连接了存储库,则必须使用新管理器的新存储库自行重新分配它们。

对于实体对象也是如此。例如,如果您仍然有一个 $parent 实体对象,创建一个新的 $child 实体并将 $child 分配给关系中的 $parent,则持久化和刷新将会失败,因为新管理器会找到分离的对象。

我试图通过管理器的合并方法让它与现有对象一起工作,但最终出现了其他错误,所以我现在只是通过新管理器再次查询它们:(