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