Laravel 9统计数据库用户表注册用户总数结果错误问题
错误原因
Schema::getColumnListing('users')的功能是获取users数据表的所有字段名组成的数组,和表内存储的用户记录没有任何关系。你得到返回值9,是因为你的users表当前一共设置了9个字段,外层套的count()统计的是字段总数,自然不可能得到正确的用户记录条数。
正确实现方案
核心原则:数据库查询、数据统计逻辑不要直接写在视图模板里,应当在控制器层完成计算后,把结果传递给视图渲染,符合MVC分层规范
控制器层统计(推荐写法,性能最优)
在渲染main.blade.php的对应控制器方法中,通过用户模型直接调用count方法生成统计SQL,由数据库直接返回总条数,不会加载多余的用户记录:// 对应控制器方法示例 public function index() { // 生成 SELECT COUNT(*) FROM users 语句直接返回统计值 $totalUser = \App\Models\User::count(); return view('main', compact('totalUser')); }在
main.blade.php模板中直接输出传递的变量即可:<div>已注册用户总数量:{{ $totalUser }}</div>视图层直接调用(不推荐,仅作兼容场景参考)
如果你暂时不想调整控制器逻辑,也可以直接在模板中调用模型的count方法,不要用Schema相关的表结构操作函数:<div>已注册用户总数量:{{ \App\Models\User::count() }}</div>
注意不要使用
User::all()->count()这类写法,该逻辑会先把users表所有记录全量查询到内存中再统计条数,当用户数据量达到十万、百万级时会直接耗尽服务内存,响应速度极慢。
内容的提问来源于stack exchange,提问作者CryptoPath
相关产品推荐
相关产品推荐

