php - 给定一个查询,我如何找到生成它的 ORM 方法?

标签 php mysql symfony orm doctrine-orm

在我工作的地方,我们在多个项目中同时使用 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/

相关文章:

php - 从 PHP 表单更新记录数据库

php - 如何从 php 数组创建一个 javascript 数组?

php - 删除关联数组中的键不起作用

带 Excel VBA 的 MySQL ODBC 连接器 - 无法删除记录

events - 如何在 FormEvents::PRE_SUBMIT 事件中添加计算字段

symfony - 如何在 Controller 中获取 Assets 的完整 url?

javascript - 更新或插入数据后关闭弹出窗口

mysql - 如何通过 if 语句对 SQL 查询进行排序

MySQL表修改时间戳

symfony - 如何在 DATABASE_URL Symfony 上使用容器的 ENV