phpcodemaker / cake-debug-query
CakePHP 查询调试器
v1.0.1
2021-05-30 08:54 UTC
README
CakePHP 中调试查询
这是一个开发支持代码,而不是完整的包。src 文件夹下的 Query.php 类中的方法可以复制到 /vendor/cakephp/cakephp/src/Database/Query.php 类。
注意
如果 CakePHP 数据库查询有新的更新,您所做的更改将丢失。
依赖关系
确保此 debugQuery($formatSQL = true) 方法在 vendor 中有依赖项 jdorn/sql-formatter。您可以使用此链接安装此依赖项:https://github.com/jdorn/sql-formatter。
如何在代码中使用?
将 debugQuery($formatSQL = true) 方法放置在以下文件内部
<!-- language: php -->
public function debugQuery($formatSQL = true): string
{
$query = $this->sql();
$placeholderArray = $this->getValueBinder()->bindings();
if (null != $placeholderArray) {
foreach ($placeholderArray as $placeholder => $paramArray) {
switch ($paramArray['type']) {
case 'json' :
$QueryParam[substr($placeholder, 1)] = '\'' . json_encode($paramArray['value'], JSON_NUMERIC_CHECK) . '\'';
break; case 'boolean':
case 'integer':
$QueryParam[substr($placeholder, 1)] = $paramArray['value'];
break;
case 'string':
case 'text' :
default :
$QueryParam[substr($placeholder, 1)] = "'{$paramArray['value']}'";
break;
}
}
}
$outputQuery = $query;
if (!empty($QueryParam)) {
$outputQuery = \Cake\Utility\Text::insert($query, $QueryParam);
}
return $formatSQL ? \SqlFormatter::format($outputQuery) : $outputQuery;
}
`
控制器内带有格式化视图的 SQL
<!-- language: php -->
$this->loadModel('Model);
print $this->Model
->find()
->select(["select_column"])
->where(["user_id" => 1])
->debugQuery()
[输出]
SELECT
Panels.panel AS Panels__panel,
Panels.element AS Panels__element
FROM
panels Panels
控制器内无格式化视图的 SQL
<!-- language: php -->
$this->loadModel('Model);
$this->Model
->find()
->select(["select_column"])
->where(["user_id" => 1])
->debugQuery(false)
[输出]
SELECT Panels.panel AS Panels__panel, Panels.element AS Panels__element FROM panels Panels
[注意]
在 Web 上使用 dd(),以及 CLI 用于调试目的时,使用 formatSQL 标志 false,如下所示,
否则 debugQuery 返回 HTML,您将无法以可读的格式看到 SQL。
dd($this->Model->find()->where()->debugQuery(false));