在 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如何在自动重定向验证后发送参数以查看

Laravel:有啥方法可以在不编译的情况下加载刀片模板?

尝试在 Laravel 7 中查看不同内容时,刀片视图上的 ErrorException 未定义变量

Laravel 在控制器中手动检查 CSRF

检查某个类别中是不是存在帖子不起作用。 php,刀片,Laravel

如果@include 中存在变量,则检查刀片