如何在CakePHP 3中查看model-> save()上的SQL查询?有没有办法做到这一点?我希望获得特定的SQL查询,例如当我保存新实体时。
我需要它,因为我想在某些情况下将其保存到日志文件中。
我的bootstrap.php日志配置:
Log::config('current', [
'className' => 'File',
'path' => LOGS.DS.date('Y-m').DS,
'scopes' => ['daily','queriesLog'],
'file' => date('Y-m-d'),
]);
我想得到什么:
例如,当我保存实体时:
$this->Clients->save($client);
我想记录一些东西,我想用这个日志保存INSERT sql查询
Log::warning('test\n', ['scope' => ['daily']]);
答案 0 :(得分:3)
解决方案可能是使用查询记录
http://book.cakephp.org/3.0/en/orm/database-basics.html#query-logging
您可以在保存模型时关闭查询记录,然后将其关闭
例如,我有一个评论模型
在我的bootstrap.php中,我做了
Log::config('current',
[
'className' => 'File',
'path' => LOGS.date('Y-m').DS, // you don't need a DS between LOGS and date()
'scopes' => ['daily','queriesLog'],
'file' => date('Y-m-d'),
]);
在我的控制器中我做了
$conn = \Cake\Datasource\ConnectionManager::get('default');
$comment = $this->Comments->get(5620); // 5620 is the id of one comments of mine
$conn->logQueries(true);
$comment = $this->Comments->get(5619); // 5619 is onother id of one comments of mine
$comment->text = 'Test';
$this->Comments->save($comment);
$conn->logQueries(false);
这样就可以在logs文件夹中创建一个文件,该文件包含以下内容
2015-12-16 13:38:35 Debug: SELECT ... WHERE Comments.id = 5619 LIMIT 1
2015-12-16 13:38:35 Debug: BEGIN
2015-12-16 13:38:35 Debug: UPDATE comments SET text = 'Test' WHERE id = 5619
2015-12-16 13:38:35 Debug: COMMIT
请注意,用于获取评论#5620的查询尚未记录
另请注意,如果您未启用调试工具,则此功能正常
答案 1 :(得分:-1)
将其放入模型
function getLastQuery() {
Configure::write(‘debug’,false);
$dbo = $this->getDatasource();
$logs = $dbo->getLog();
$lastLog = end($logs['log']);
$latQuery = $lastLog['query'];
echo "<pre>";
print_r($latQuery);
}
after $this->save($data);
调用该函数
$this->getLastQuery();
并回应它。
试试吧。