有没有办法可以导致CakePHP根据需要转储其SQL日志?我想执行代码直到我的控制器中的某个点,看看SQL运行了什么.
dec*_*eze 123
试试这个:
$log = $this->Model->getDataSource()->getLog(false, false);
debug($log);
Run Code Online (Sandbox Code Playgroud)
http://api.cakephp.org/2.3/class-Model.html#_getDataSource
如果您有多个数据源,则必须为每个数据源执行此操作.
Urd*_*mar 36
有四种显示查询的方法:
这将显示用户模型执行的最后一个查询:
debug($this->User->lastQuery());
Run Code Online (Sandbox Code Playgroud)这将显示用户模型的所有已执行查询:
$log = $this->User->getDataSource()->getLog(false, false);
debug($log);
Run Code Online (Sandbox Code Playgroud)这将显示所有查询的日志:
$db =& ConnectionManager::getDataSource('default');
$db->showLog();
Run Code Online (Sandbox Code Playgroud)如果要在应用程序中显示所有查询,请在view/element/filename.ctp中使用.
<?php echo $this->element('sql_dump'); ?>
Run Code Online (Sandbox Code Playgroud)bju*_*son 29
如果您正在使用CakePHP 1.3,则可以将其放在视图中以输出SQL:
<?php echo $this->element('sql_dump'); ?>
Run Code Online (Sandbox Code Playgroud)
因此,您可以创建一个名为"sql"的视图,仅包含上面的行,然后在您想要查看时在控制器中调用它:
$this->render('sql');
Run Code Online (Sandbox Code Playgroud)
(还记得将调试级别设置为至少2英寸app/config/core.php
)
for cakephp 2.0在AppModel.php中编写此函数
function getLastQuery()
{
$dbo = $this->getDatasource();
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
return $lastLog['query'];
}
Run Code Online (Sandbox Code Playgroud)
要在Controller Write中使用它:echo $ this-> YourModelName-> getLastQuery();
小智 5
CakePHP没有$ this-> Model-> lastQuery();这是非常令人沮丧的.这里有两个解决方案,包括Handsofaten的修改版本:
要打印上次查询运行,请在/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));
}
Run Code Online (Sandbox Code Playgroud)
然后打印输出你可以运行:
debug($this->lastQuery()); // in model
Run Code Online (Sandbox Code Playgroud)
要么
debug($this->Model->lastQuery()); // in controller
Run Code Online (Sandbox Code Playgroud)
要打印出在给定页面请求中运行的所有查询,请在控制器(或组件等)中运行:
$this->render('sql');
Run Code Online (Sandbox Code Playgroud)
它可能会丢失视图错误,但这比不能访问最近的查询要好!
(正如Handsofaten所说,cake/libs/view/elements /中有/elements/sql_dump.ctp,但我能够在不创建sql.ctp视图的情况下执行上述操作.有人可以解释一下吗?)
在CakePHP 1.2中..
$db =& ConnectionManager::getDataSource('default');
$db->showLog();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
133352 次 |
最近记录: |