在Laravel中查看刀片时,检查向数据库发送了多少查询

时间:2019-05-23 22:51:43

标签: sql database laravel eloquent laravel-blade

我有一个收藏集。

$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()从数据库中提取了项目。另一个问题是,在显示视图/刀片时,如何确定有多少查询发送到数据库?

6 个答案:

答案 0 :(得分:2)

您始终可以检查“网络”选项卡,然后选择将显示每个请求的XHR。 您也可以使用

{{ $items->find($id)->name }}

更加流畅:P

希望它会有所帮助:D

答案 1 :(得分:1)

它只获取一个查询,然后在获取后应用where()方法,在这种情况下,它只是原始项目的过滤器。

此外,您可以安装记录器数据库以检查正在执行的查询,例如Laravel Debugbar

答案 2 :(得分:1)

您已经从数据库中获取了项目,因此没有运行查询。您正在使用Laravel集合的where()函数,该函数会根据您提供的键值对进行过滤。 https://laravel.com/docs/5.8/collections#method-where

答案 3 :(得分:1)

您可以在方法中监听数据库查询:

$counter = 0;
\DB::listen(function($sql) {
    $counter++; //increment for each query was run
});

Reference

答案 4 :(得分:1)

要检查/调试在laravel中的页面上执行的所有查询:(下面的代码可以插入根文件中)

\Event::listen('Illuminate\Database\Events\QueryExecuted', function ($query) {
    var_dump($query->sql);
    var_dump($query->bindings);
    var_dump($query->time);
});

答案 5 :(得分:0)

您可以使用流行的Debug

https://github.com/barryvdh/laravel-debugbar

它非常简单和说明性!