Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Debugging Lili:我们可以看到执行的查询如CakePHP所示吗_Debugging_Logging_Lithium - Fatal编程技术网

Debugging Lili:我们可以看到执行的查询如CakePHP所示吗

Debugging Lili:我们可以看到执行的查询如CakePHP所示吗,debugging,logging,lithium,Debugging,Logging,Lithium,您知道有什么方法可以像在CakePHP中一样在Limition中显示正在执行的查询吗。 我可能会更容易找到执行的内容。 在页面底部显示执行的查询 !![屏幕截图] 收到答案后,我将代码添加到控制器: Volumes::applyFilter('find', function($self, $params, $chain) { echo '<pre>===== self ======<br>'; var_dump($self); echo

您知道有什么方法可以像在CakePHP中一样在Limition中显示正在执行的查询吗。 我可能会更容易找到执行的内容。 在页面底部显示执行的查询

!![屏幕截图]

收到答案后,我将代码添加到控制器:

Volumes::applyFilter('find', function($self, $params, $chain) {
      echo '<pre>===== self ======<br>';
      var_dump($self);
      echo '===== params ======<br>';
      var_dump($params);
      echo '===== chain ======<br>';
      var_dump($chain);
      echo '</pre>';
      $next = $chain->next($self, $params, $chain);

      return $next;

});
Volumes::applyFilter('find',function($self,$params,$chain){
回音'===self===
'; var_dump($self); echo'===参数====
'; var_dump($params); 回音'===链====
'; var_dump($chain); 回声'; $next=$chain->next($self,$params,$chain); 返回$next; });
它给我一个关于self和params的所有var_dump的输出,但我需要执行的SQL查询


请检查屏幕截图

您可以通过向要记录的查询类型添加筛选器来完成此操作。您可以在引导文件中全局定义它们,也可以在控制器中“本地”定义它们。下面的示例并没有很好地打印查询,但是当您有数据时,这很容易做到

下面的代码显示了如何获取信息,但它并没有以一种漂亮的方式输出信息

Connections::get('default')->applyFilter('_execute', function($self, $params, $chain) {
    echo "SQL: " . $params['sql'] . "</br>\n";
    $time = microtime(true);

    $next =  $chain->next($self, $params, $chain);

    $time = microtime(true) - $time;
    $count = 0;
    while ($next->next())
     $count++;
    $next->rewind();
    echo "Count: " . $count . "</br>\n";        
    echo "Time: " . $time . "</br>\n";
    echo "=====================</br>\n";

    return $next;
});
Connections::get('default')->applyFilter('read',函数($self,$params,$chain){
回声“===================
\n”; if(is_object($params['query'])){ 变量转储($params['query']->conditions()); } 否则{ echo“Query:”;var_dump($params['Query']);echo“
\n”; } $time=microtime(真); $next=$chain->next($self,$params,$chain); $time=微时间(真)-$time; echo“Results:”.count((数组)$next)。“
\n”; 回显“时间:.”时间“
\n”; 返回$next; });
请注意,直接从过滤器回显数据将使您的页面无效,因为这将在页眉之前打印。但是,如果将过滤器中的数据保存到数组中,而不是将其输出,则可以在以后的视图中使用它。例如,您可以制作一个模板,将这些信息添加到页面中

编辑:更新代码

Edit2:添加了一种始终获取执行的确切SQL的方法。得到

Connections::get('default')->applyFilter('u execute',函数($self,$params,$chain){
echo“SQL:.$params['SQL']”
\n; $time=microtime(真); $next=$chain->next($self,$params,$chain); $time=微时间(真)-$time; $count=0; 而($next->next()) $count++; $next->rewind(); 回显“计数:.$Count.”
\n; 回显“时间:.”时间“
\n”; 回声“===============================
\n”; 返回$next; });
正如@Nils所建议的,您可以利用锂过滤器编写一个简单的查询记录器。
我做了一个。它将
读取
查询记录到
生产
环境中的文件中。
您应该能够自定义并在
创建
更新
删除
操作上添加过滤器,以满足您的需要


如果您正在寻找一种开箱即用的解决方案,如Cake的调试工具栏,请检查
li3_perf
项目:

基于Nils和Mehdi的所有建议,我创建了一个新的插件,该插件将只显示查询结果,而不显示在Limition中使用MongoDB执行的查询的vardump或print\r()

现在我真的很容易找到它正在执行的内容

您可以在Github上查看该项目:


请再次检查我的问题。我希望结果显示向数据库发出的查询。我已经添加了您研究的答案。谢谢你的建议。现在你也可以加入我尝试过的插件li3_pref,它还提供了vardump,我正在寻找显示向数据库发送的实际查询的输出。我编写的过滤器显示发送到数据库的实际查询database@MehdiLahmamB. 爱情过滤器,有很多方法可以做相似的事情。我喜欢这个要点,我需要多看看这个记录器。我已经从你的研究中添加了我的答案。谢谢你的建议。现在你也可以为插件github.com/nilamdoc/li3_showPlease check my updated answer bellow做出贡献,第二个过滤器将始终输出准确的SQL,而不仅仅是生成它的参数。如果您有任何问题,请发表评论。
Connections::get('default')->applyFilter('_execute', function($self, $params, $chain) {
    echo "SQL: " . $params['sql'] . "</br>\n";
    $time = microtime(true);

    $next =  $chain->next($self, $params, $chain);

    $time = microtime(true) - $time;
    $count = 0;
    while ($next->next())
     $count++;
    $next->rewind();
    echo "Count: " . $count . "</br>\n";        
    echo "Time: " . $time . "</br>\n";
    echo "=====================</br>\n";

    return $next;
});