在 Laravel 中查看刀片时检查有多少查询发送到数据库
Posted
技术标签:
【中文标题】在 Laravel 中查看刀片时检查有多少查询发送到数据库【英文标题】:Check how many queries are sent to DB while viewing a Blade in Laravel 【发布时间】:2019-10-10 12:53:12 【问题描述】:我有一个收藏。
$items = Item:where('count' , '>' , 5)->get();
我有一个 id 数组。
$ids = [2 , 4 , 7 , 8];
在我的 Laravel 刀片中,我想根据 ids 数组在 $items 上显示每个。我做了这样的事情:
@foreach($ids as $id)
<a href="#">
$items->where('id' ,$id)->first()->name
</a>
@endforeach
它运行良好。问题是,我向数据库发送了多少查询?以下是否正在运行新查询?
$items->where('id' ,$id)->first()->name
因为我已经get()
数据库中的项目。另一个问题是,如何在显示视图/刀片时找出有多少查询被发送到数据库?
【问题讨论】:
你可以试试laravel-debugbar 使用望远镜,查询选项卡,您将看到在页面加载时执行的每个查询。非常有用 【参考方案1】:你可以使用流行的 Debug
https://github.com/barryvdh/laravel-debugbar
它非常简单和说明性!
【讨论】:
【参考方案2】:在 laravel 中检查/调试页面上执行的所有查询:(下面的代码可以插入到根文件中)
\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query)
var_dump($query->sql);
var_dump($query->bindings);
var_dump($query->time);
);
【讨论】:
谢谢。我使用了这段代码并得到了数据库查询的时间。我有两个问题: 1- 是 $query->time 毫秒吗?另一个问题是我的数据库中有 500,000 条记录,使用分页加载查询时间需要 100 毫秒。可以吗? 嗨 1. 是的,查询时间以毫秒为单位。 2. 这完全取决于获取的数据。 100 毫秒对我来说听起来不错!如果它对您有用,请接受该解决方案;)【参考方案3】:你可以在你的方法中监听数据库查询:
$counter = 0;
\DB::listen(function($sql)
$counter++; //increment for each query was run
);
Reference
【讨论】:
【参考方案4】:您始终可以检查网络选项卡并选择将显示每个请求的 XHR。 你也可以使用
$items->find($id)->name
更流畅:P
希望对你有帮助:D
【讨论】:
【参考方案5】:您已经从数据库中获取了您的项目,因此不会运行任何查询。您正在使用 Laravel 集合的 where() 函数,该函数根据您提供的键、值对进行过滤。 https://laravel.com/docs/5.8/collections#method-where
【讨论】:
【参考方案6】:它只得到一个查询,然后在get之后应用where()方法,在这种情况下只是原始项目的过滤器。
另外,你可以安装一个 logger db 来检查查询在做什么,例如,Laravel Debugbar
【讨论】:
以上是关于在 Laravel 中查看刀片时检查有多少查询发送到数据库的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Laravel 7 中查看不同内容时,刀片视图上的 ErrorException 未定义变量