如何在Laravel视图中展示SQL SUM()语句返回的stdClass类型查询结果
问题原因
DB::select执行查询后返回的是结果数组,数组中的每一个元素才是对应查询行的stdClass对象,因此你直接对$result调用方法会触发数组调用成员函数的报错。同时你的聚合字段没有设置别名,默认属性名为SUM(votes),包含特殊字符需要特殊方式访问。
另外注意你原有路由代码里有语法疏漏,return view('read', ['result' => $result);缺少右方括号,需要补全为return view('read', ['result' => $result]);避免额外报错。
解决方案
方案1:直接在视图中取值
按照现有代码结构,直接用以下写法即可输出目标数值:
{{ $result[0]->{'SUM(votes)'} }}
原理是先取数组的第一个元素,再通过花括号+引号的方式访问包含特殊字符的对象属性。
方案2(更推荐):SQL加别名简化逻辑
在写聚合查询时给结果起别名,后续取值会更清晰不易出错:
- 修改路由中的SQL和传参逻辑:
Route::get('/db', function () { // 给SUM结果起别名total_votes $result = DB::select('SELECT SUM(votes) as total_votes FROM table WHERE column1 = ? AND column2 = ? AND column3 LIKE ?', ['US', 3, '30%']); // 直接取出数值传给视图,避免视图处理复杂逻辑 return view('read', ['total_votes' => $result[0]->total_votes]); });
- 视图中直接输出即可:
{{ $total_votes }}
内容的提问来源于stack exchange,提问作者Aloysia de Argenteuil
相关产品推荐
相关产品推荐

