function lastQuery(){
$dbo = $this->getDatasource();
$logs = $dbo->_queriesLog;
// return the first element of the last array (i.e. the last query)
return current(end($logs));
}
然后,要打印输出,您可以运行:
debug($this->lastQuery()); // in model
或
debug($this->Model->lastQuery()); // in controller
9条答案
按热度按时间s3fp2yjn1#
试试看:
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
如果您有多个数据源,则必须对每个数据源执行此操作。
0s0u357o2#
有四种方式可显示查询:
1.这将显示用户模型中执行的最后一个查询:
1.这将显示用户模型的所有已执行查询:
1.这将显示所有查询的日志:
1.如果你想显示整个应用程序的所有查询日志,你可以在view/element/filename. ctp中使用。
6qftjkof3#
如果你使用的是CakePHP 1.3,你可以把这个放在你的视图中,输出SQL:
因此,您可以创建一个名为'sql'的视图,只包含上面的行,然后在您想要查看它的任何时候在控制器中调用它:
(Also请记住在
app/config/core.php
中将调试级别至少设置为2)来源
zc0qhyus4#
在AppModel.php中编写此函数
要在控制器写入中使用此选项:如果您的用户名是您的用户名,请单击“返回”。
9lowa7mx5#
令人非常沮丧的是CakePHP没有一个$this-〉Model-〉lastQuery();。以下是两个解决方案,包括Handsofaten的修改版本:
1.创建Last查询函数
要打印上次运行的查询,请在/app_model. php文件中添加:
然后,要打印输出,您可以运行:
或
2.呈现SQL视图(在模型中不可用)
要打印出在给定页面请求中运行的所有查询,请在您的控制器(或组件等)中运行:
它可能会抛出一个缺少视图的错误,但这总比不访问最近的查询要好!
(As Handsofaten说,cake/libs/view/elements/中有/elements/sql_dump.ctp,但我可以在不创建sql.ctp视图的情况下完成上述操作。有人能解释一下吗?)
s8vozzvw6#
在CakePHP 1.2中,您可以使用
0yg35tkg7#
最后对我起作用并且与2.0兼容的是在我的布局(或模型)中添加
它还取决于在Config/core.php中设置的调试变量
mw3dktmi8#
蛋糕的插件DebugKit也可以完成这项工作。https://github.com/cakephp/debug_kit
wj8zmpe19#
如果您对代码的某个特定部分感兴趣,可以先清除日志,然后只显示在该点之后发生的查询。
另请注意,下面的“Model”是实际的类名,如User、Page等。