不通过控制器如何将路由中SQL查询获取的数据展示在Blade模板中
实现方案
你当前的实现思路本身是可行的,Laravel 支持在路由闭包中直接查询数据库并传递参数到视图,仅需要修正2处代码问题即可正常展示数据:
1. 路由代码调整
DB::select()执行原生SQL查询返回的是stdClass对象数组,你需要的count统计结果在数组第一个对象的统计字段中,不需要将整个数组传递到模板遍历,修改后的路由代码如下:
Route::get('/dashboard', function () { // 给count统计结果起别名方便后续取值 $sql = "select count(id) as total from vehicle"; $queryVeh = DB::select($sql); // 取出统计的数值直接传给模板 $vehicleCount = $queryVeh[0]->total; return view('dashboard')->with('vehicleCount', $vehicleCount); });
2. Blade模板代码调整
现在传递到模板的是单个统计数值,不需要再用循环遍历,直接输出即可:
<div class="w3-row-padding w3-margin-bottom"> <div class="w3-quarter"> <div class="w3-container w3-red w3-padding-16"> <div class="w3-left"> <i class="fa fa-comment w3-xxxlarge"></i> </div> <div class="w3-right"> <h3>{{ $vehicleCount }}</h3> </div> <div class="w3-clear"></div> <h4>Total Vehicles</h4> </div> </div> </div>
可选优化方案(推荐)
你可以直接用Laravel查询构造器获取统计值,不需要编写原生SQL,代码更简洁不易出错:
Route::get('/dashboard', function () { $vehicleCount = \DB::table('vehicle')->count('id'); return view('dashboard')->with('vehicleCount', $vehicleCount); });
内容的提问来源于stack exchange,提问作者asim ali
相关产品推荐
相关产品推荐

