我有一个带有 时间戳,用户ID,值 的表。我试图获取特定用户在特定年份的特定月份的值的总和。这就是我正在使用的:
$data = Laborhrs::all()->where('employee','7')->sum('value');
这给了我#7员工的全部数据的总和。我希望得到特定年份中特定月份的总和。说说2018年10月的价值总和。我想念什么?
答案 0 :(得分:1)
您忘记添加年份和月份的条件,并且不需要使用all()
方法。
$sum = Laborhrs::where('employee','7')
->whereMonth('timestamp_column_name', 10)
->whereYear('timestamp_column_name', 2018)
->sum('value');
此外:我看过您的几篇文章,并且我认为,您不了解laravel雄辩和收藏如何工作。
All()
方法从数据库返回具有所有结果的收集,然后通过收集过滤它们(我不是第一次看到)。这是非常缓慢的解决方案。
最好在get()
中使用条件(get()
应该在条件之后),例如:
$data = Laborhrs::where('employee','7')->get();
它将返回具有所需结果的集合,并且从数据库中获取后无需过滤它们。它将更快地工作。
在这种情况下,您根本不需要all()
和get()
方法。 Eloquent拥有sum()
方法,该方法将计算数据库中的总和并返回值。