Debugging Lili:我们可以看到执行的查询如CakePHP所示吗
您知道有什么方法可以像在CakePHP中一样在Limition中显示正在执行的查询吗。 我可能会更容易找到执行的内容。 在页面底部显示执行的查询 !![屏幕截图] 收到答案后,我将代码添加到控制器: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
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;
});