Symfony Profiler 查询堆栈跟踪

Symfony Profiler Query Stack Trace

我有一个用 Symfony 3.4 和 Sonata Admin 制作的门户。

在特定的管理页面中有很多生成的查询。我使用探查器追踪它们,但我看不到它们生成的 where

同一个查询用不同的 ID 重复了很多次:

有没有办法了解它们是在哪里生成的?我看到了post,目前似乎无法做到:

https://github.com/doctrine/DoctrineBundle/issues/722

我不能只在探查器中的某处放置一个 dump/die 来获取特定行吗?

这不是一项简单的任务,但我认为您可以通过调试日志信息、原则查询和执行时间表获得一些提示。

在timeline中你可以看到doctrine什么时候执行查询,通过Doctrine和debug的信息你可以加入执行时间和执行的查询。

希望以上信息对您有所帮助

似乎没有简单的方法来跟踪查询发起者,但我发现以下内容 post 解释了您可能会看到多个类似查询的原因: Doctrine2 in Symfony2: How can I see which object-call leads into a query?

我刚找到这个插件,它正是我需要的:

https://github.com/VincentChalnot/DoctrineDebugBundle

它似乎工作正常,它显示了来自查询的堆栈跟踪。

从 v1.11.0 开始,Doctrine Bundle 可以在 Symfony Profiler 中显示查询回溯。 这可能有助于查找导致执行特定查询的代码。

该功能默认情况下处于禁用状态,但您可以使用学说连接设置中的 profiling_collect_backtrace 配置启用它。

有关详细信息,请参阅 https://symfony.com/blog/new-in-doctrinebundle-1-11-0#store-backtraces-when-profiling-queries