Doctrine已经弃用了它的->setSQLLogger()
,转而支持中间件。
我找不到任何方法来记录查询的开始和结束以获得执行时间。
以前,它可以像在这个问题中关于Symfony2一样完成。
我应该创建什么样的中间件才能记录查询的执行时间?
现在,我只启用了日志记录,但这只是在执行查询之前记录查询。
我发现所有的查询都被收集在DebugDataHolder
中,所以作为替代方案,它将在请求结束时记录所有查询:
use Doctrine\SqlFormatter\SqlFormatter;
class DatabaseFormatter implements FormatterInterface
{
private string $id;
private SqlFormatter $formatter;
public function __construct(
private DebugDataHolder $dataHolder,
) {
}
public function afterRequest()
{
$queries = $this->dataHolder->getData();
// ...
}
}
1条答案
按热度按时间wqnecbli1#
我已经分析了Symfony是如何添加其中间件的,并编译了以下代码,可以对查询执行任何需要的操作:
首先按照this doc中的说明创建基本中间件
然后添加额外的中间件:
Connection
类在进行直接请求时使用,Statement
在进行准备语句时使用。