有没有一种方法可以使CakePHP按需转储其SQL日志?我想执行代码直到控制器中的某个点,然后查看已运行的SQL。
Answers:
尝试这个:
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
如果您有多个数据源,则必须对每个数据源执行此操作。
Configure::write('debug', 2);
以启用MySQL日志记录。
有四种显示查询的方式:
这将显示用户模型上一次执行的查询:
debug($this->User->lastQuery());
这将显示所有执行的用户模型查询:
$log = $this->User->getDataSource()->getLog(false, false);
debug($log);
这将显示所有查询的日志:
$db =& ConnectionManager::getDataSource('default');
$db->showLog();
如果要显示所有查询记录整个应用程序,则可以在view / element / filename.ctp中使用。
<?php echo $this->element('sql_dump'); ?>
CakePHP没有$ this-> Model-> lastQuery();非常令人沮丧。这是两个解决方案,包括Handofaten的修改版本:
要打印最后一次查询,请在/app_model.php文件中添加:
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
要打印出在给定页面请求中运行的所有查询,请在您的控制器(或组件等)中运行:
$this->render('sql');
可能会丢失视图错误,但这比没有访问最近的查询要好!
(正如Handsofaten所说,在cake / libs / view / elements /中有/elements/sql_dump.ctp,但是我能够在不创建sql.ctp视图的情况下完成上述操作。任何人都可以解释一下吗?)
蛋糕的插件DebugKit也可以完成这项工作。https://github.com/cakephp/debug_kit
$log = $this->Model->getDataSource()->showLog( false ); debug( $log )
。以防万一其他人通过搜索遇到此答案。