首页 > 解决方案 > 在发送到数据库之前更新每个学说查询

问题描述

我们正在运行一个巨大的平台,该平台具有用于多个前端的单个数据库。现在我们将尝试识别我们的慢查询并更好地了解我们的流量来自哪个页面。

我的想法是在每个 sql 查询中注入页面名称作为注释,以便在使用查看数据库时能够看到它SHOW FULL PROCESSLIST

在此处输入图像描述

最后它应该是这样的:/*PAGE NAME*/ SHOW FULL PROCESSLIST

如果我在 sequel pro 中这样做,那么评论似乎会被列出:

在此处输入图像描述

如何使用侦听器/订阅者更新每个学说查询以注入自定义评论?

标签: phpmysqldoctrine-ormdoctrine

解决方案


Doctrine DBAL 允许您定义自己的 Connection 类。

doctrine:
    dbal:
        wrapper_class: App\DBAL\MyConnectionWrapper

您可以根据需要实现一个子类Doctrine\DBAL\Connection并覆盖。executeQuery()

class MyConnectionWrapper extends Connection
{
  public function executeQuery($sql, array $params = [], $types = [], ?QueryCacheProfile $qcp = null)
  {
    $sql = '/*PAGE NAME*/ '.$sql;
    return parent::executeQuery($sql, $params, $types, $qcp);
  }
}

推荐阅读