laravel数据库sum不准是为啥?

DB::table('topics')->where('user_id', $user->id)->sum('view_count')

结果:2152(这个是对的,手动验算过)

 Topic::where('user_id', $user->id)->sum('view_count');

结果:1756

第二种为什么少了,要怎么检查是哪里不对呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
翟宇鑫
最佳答案

软删除

1年前 评论
讨论数量: 7
翟宇鑫

软删除

1年前 评论

输出SQL语句看一下,不应该

1年前 评论
翟宇鑫

软删除

1年前 评论

在这两个查询中,DB::table() 方法是用于使用 Query Builder 进行数据库操作的,而 Topic::where() 则是使用 Eloquent ORM,这两个方法的语法有所不同。

在第一个查询中,DB::table() 方法返回一个查询构建器实例,可以在查询构建器中使用不同的查询方法链式调用,如 where() 和 sum(),该方法可以通过查询语句进行求和操作。这个查询通常返回得到的视图次数总和。

在第二个查询中,Topic::where() 返回是一个查询构建器实例,但是它使用了 Eloquent ORM,它会将模型和数据库表相对应起来。所以它带有更多的功能和优点。然而,sum() 在 Eloquent ORM 中的执行方式可能与在 Query Builder 中的执行方式有所不同。Topic::where() 并不直接和相应的数据库表进行连接,因为它是基于 Eloquent ORM。在这种情况下,sum() 方法将返回所有相关模型的 view_count 属性之和,而不是数据库表的实际值。

因此,结果会是不同的。如果使用 Eloquent ORM 进行查找,可以尝试使用 DB::raw() 方法来对原始的 SQL 查询进行求和,这将直接对 SQL 进行操作,而不是通过 Eloquent ORM 进行操作。

Topic::where('user_id', $user->id)->select(DB::raw('SUM(view_count) as total_view_count'))->get()->first()->total_view_count;
1年前 评论
lddtime 1年前
pigzzz 1年前
Icy (作者) 1年前

开发环境开启 telescope,一目了然哦

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!