我们在多个项目中使用Cake和Symfony,以及Doctrine ORM。我们的代码库中很少有地方在代码中写出了实际的SQL查询 - 我们让ORM库完成了繁重的任务。
现在我的IT人员从MySQL慢查询日志中给我100mb文件,我需要找到这个查询的创建位置。我已经在代码库中针对特定字段尝试了各种递归greps,并且即使不是数百个文件,也可能是空的。例如:
cd ~/webproject
grep -r -E 'field1.*field2.*field3' .
或
find . -name '*.php' -print | xargs grep -E 'field1.*field2.*field3'
您是否有更好的建议,技巧或技巧来跟踪与特定最终"呈现相关的文件,控制器或ORM模型方法?#34; SQL语句?
答案 0 :(得分:4)
这是你可以使用的技巧。我不熟悉Doctrine或Cake ORM,但它可以用一般术语轻松描述 - 我使用Propel,我相信它可以做到这一点。
只需在所有查询中添加自定义WHERE
子句,如下所示(根据需要更换自己的方法名称)。 1 = 1
实际上是一个无操作,并且本身不应该影响查询性能,并且允许您通过方便的注释进行走私:
$query->addCustomWhere(
'1 = 1 /* ' . __CLASS__ . '::' . __FUNCTION__ . ' */'
);
然后,所有已记录的查询都会在注释中包含它们旁边的类/函数。当然,你可以为此编写一个辅助方法,只需传入查询和魔术变量,以节省每次写出来的时间。