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

mwkjh3gx  于 2023-02-10  发布在  其他
关注(0)|答案(6)|浏览(151)

我有一个收藏。

$items = Item:where('count' , '>' , 5)->get();

我有一个id数组。

$ids = [2 , 4 , 7 , 8];

在我的Laravel Blade中,我想基于ids数组在$items上显示每个元素。我做了如下操作:

@foreach($ids as $id)
    <a href="#">
        {{ $items->where('id' ,$id)->first()->name }}
    </a>
@endforeach

它运行得很好。问题是,我向数据库发送了多少个查询?下面的代码是在运行一个新的查询吗?

$items->where('id' ,$id)->first()->name

因为我已经get()了数据库中的项目。另一个问题是,在显示视图/刀片时,我如何知道有多少查询被发送到数据库?

jpfvwuh4

jpfvwuh41#

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

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

hrirmatl2#

它只获取一个查询,并且在get之后应用的where()方法在这种情况下只是从原始项中筛选。
此外,您还可以安装一个logger db来检查querys正在做什么,例如Laravel Debugbar

b91juud3

b91juud33#

您可以随时检查网络选项卡,并选择XHR,将显示每一个请求。也可以使用

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

更平滑:P
希望对你有帮助:D

ep6jt1vc

ep6jt1vc4#

您可以在方法中侦听DB查询:

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

参考文献

iovurdzv

iovurdzv5#

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

rekjcdws

rekjcdws6#

您可以使用流行的Debug
https://github.com/barryvdh/laravel-debugbar
它非常简单和说明性!

相关问题