【问题标题】:Show SQL query of controller显示控制器的 SQL 查询
【发布时间】:2015-11-10 10:42:52
【问题描述】:

我正在使用 cakephp v3.x 和 mysql。

我想查看控制器的 SQL 查询。此控制器没有错误,并且运行成功。

public function appGetResult()
{
    $this->autoRender = false;
    $start_date = $this->request->query['start_date'];
    $end_date = $this->request->query['end_date']; 

    $results = $this->MonthlyReports->getResult($start_date, $end_date);

    echo json_encode($results);
} 

如何修改控制器代码以显示用于生成结果的 SQL 查询?这不适用于实际生产用途。更多待考。

【问题讨论】:

  • 请问为什么投反对票?请解释一下,以便我可以改进我未来的问题。谢谢。

标签: php mysql sql cakephp cakephp-3.0


【解决方案1】:

您可以在 CakePHP3 上开启查询日志:http://book.cakephp.org/3.0/en/orm/database-basics.html#query-logging

如果您有兴趣进行更多调试等,DebugKit 做得非常好。

【讨论】:

  • 谢谢。我还是有些不知所措。如何在$conn->logQueries(true); 中获得$conn?我在哪里运行此代码?
  • 应该这样做:$conn = ConnectionManager::get('connection_name');。从配置中插入您的 connection_name
  • 我应该在哪个文件中运行这一行$conn = ConnectionManager::get('connection_name');?在控制器中?
  • 是的。我会在您要记录的查询上方运行它,在 logQueries(true) 之前。
  • 别忘了在控制器顶部添加use Cake\Datasource\ConnectionManager;
【解决方案2】:

我想出了一个间接的方法来回答我自己的问题。这是查看 MySQL 查询语句的间接方式。

public function appGetResult()
{
    //$this->autoRender = false;
    $start_date = $this->request->query['start_date'];
    $end_date = $this->request->query['end_date']; 

    $results = $this->MonthlyReports->getResult($start_date, $end_date);

    echo json_encode($results);
} 

通过注释掉$this->autoRender = false; 并且没有查看.ctp,php 页面会因错误而停止。 DebugKit 面板将显示在错误的网页上。从 DebugKit 面板,可以看到 SQL 语句。

【讨论】:

  • 酷。多么愚蠢的方式:D。 cakephp 3.x 自带调试工具(称为 DebigKit)。我已经启用了它,然后您将在页面的页脚拥有 debugKit 工具栏。单击“Sql Log”按钮,它会显示当时运行的所有查询。
【解决方案3】:

你可以使用 getLog() 或 showLog() 函数来做到这一点

var_dump($this->MonthlyReports->getDataSource()->getLog(false, false));
var_dump($this->MonthlyReports->getDataSource()->showLog());

【讨论】:

  • 我认为这个答案是关于 cakephp 2.x 而问题是关于 cakephp 3.x
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多