如何在laravel中使用sum()

时间:2015-08-19 11:46:16

标签: php mysql laravel laravel-4 eloquent

我有一张表total_count

id  studid  month   year     acls_id   total_p total_a 

1   30       08     2015        12        5      2      
2   35       08     2015        12        5      2      
3   52       08     2015        12        5      2      
4   53       08     2015        12        5      2  
5   54       08     2015        12        5      2  
6   55       08     2015        12        5      2  
7   30       09     2015        12        3      0  
8   35       09     2015        12        3      0  
9   52       09     2015        12        2      1  
10  53       09     2015        12        3      0  
11  54       09     2015        12        3      0  
12  55       09     2015        12        3      0 

我想计算每个学生total_ptotal_a

例如:studid = 30total_p = 5total_a = 2

因此,我希望获得每个月studid的总和以及total_ptotal_a的总和。

我的控制器代码是

$total_counts = DB::table('total_count')
                       ->whereBetween('smonth',08, 09))
                       ->whereBetween('syear', 2015, 2015))   
                       ->sum('total_p);
                       ->sum('total_a);

查看blade.php

{{$total_counts->total_p}}
{{$total_counts->total_a}}

但它不起作用..

如何在查询构建器格式中使用sum()

我想输出如下:

  studid     total_p   total_a

    30          8         2

    35          8         2

    52          7         3

    53          8         2

    54          8         2

    55          8         2

1 个答案:

答案 0 :(得分:1)

Eloquent的聚合函数 sum()为所有匹配criterai的行返回单个标量。如果要获取行列表,则需要构建一个查询,按照ID对学生进行分组,并计算每个行的总和。

此查询应该可以解决问题:

$total_counts = DB::table('total_count')
  ->whereBetween('smonth',08, 09))
  ->whereBetween('syear', 2015, 2015))
  ->groupBy('studid')
  ->get(['studid', DB::raw('SUM(total_a) AS sum_a'), DB::raw('SUM(total_p) AS sum_p')]);

$ total_counts 中的每一行都包含3个值: studid sum_a sum_p