在我工作的地方,我们在多个项目中同时使用 Cake 和 Symfony,以及 Doctrine ORM。在我们的代码库中,很少有地方在代码中写出实际的 SQL 查询——我们让 ORM 库完成繁重的工作。
现在我的 IT 人员从 MySQL 慢速查询日志中给我 100mb 的文件,我需要找到创建此查询的位置。我已经在代码库中针对特定字段尝试了各种递归 grep,结果要么有几十个(如果不是数百个)文件,要么空手而归。例如:
cd ~/webproject
grep -r -E 'field1.*field2.*field3' .
或
find . -name '*.php' -print | xargs grep -E 'field1.*field2.*field3'
您是否有任何更好的建议、技巧或技术用于跟踪与特定最终“呈现”SQL 语句相关的文件、 Controller 或 ORM 模型方法?
最佳答案
这里有一个你可以使用的技巧。我不熟悉 Doctrine 或 Cake ORM,但可以很容易地用一般术语对其进行描述 - 我使用 Propel,我确信它可以做到这一点。
只需将自定义 WHERE
子句添加到您的所有查询中,如下所示(根据需要将方法名称换成您自己的方法名称)。 1 = 1
实际上是一个空操作,本身不应该影响查询性能,并且允许您在方便的注释中走私:
$query->addCustomWhere(
'1 = 1 /* ' . __CLASS__ . '::' . __FUNCTION__ . ' */'
);
然后您所有记录的查询将在它们旁边的注释中显示类/函数。当然,你可以为此编写一个辅助方法,只需传入查询和魔术变量,就不必每次都写出来。
关于php - 给定一个查询,我如何找到生成它的 ORM 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29307825/