Laravel-Laravel口才中的高级总和

时间:2019-07-10 09:08:00

标签: laravel eloquent

我在mysql中有此表:

  

学生付款:id,student_class(varchar),student_code(varchar),性别(varchar),金额(float),created_at(时间戳)

型号名称是StudentPayment

我想要实现的是:

  1. 如果student_class是JSS1,它将检查每种性别的支付金额并将其放在相应的列中

  2. 如果student_class是JSS2,它将检查每个性别的支付金额并将其放在相应的列中

  3. 如果student_class是SSS1,它将检查每个人(包括男性和女性)支付的金额

  4. 如果student_class是SSS2,它将检查每个人(包括男性和女性)支付的金额

  5. 它对垂直和水平方向的所有内容进行求和

  6. 它按日期(created_at)将所有内容分组

我的 Controller 中有此查询,但不知道如何继续

    $students = DB::table('student_payment')
    ->select(
       'student_class', 
       'gender',
       'amount',
      DB::raw('DATE(created_at) as created_date')
  )               
 ->orderByRaw('created_at DESC'); 

我想要实现的结果如下所示:

expected_result

如何在控制器中完成此查询以实现此结果。谢谢

1 个答案:

答案 0 :(得分:0)

以下代码将为您分组学生付款数据,

    $payments = DB::table('student_payment')->orderBy('created_at', 'DESC')->get();

    $data = [];
    foreach ($payments as $payment){
        if($payment->gender=="male"){
            $data[$payment->student_class]['male'][] = $payment->amount;
        }elseif($payment->gender=="female"){
            $data[$payment->student_class]['female'][] = $payment->amount;
        }
    }

现在,您可以使用array_sum函数计算金额的总和。例如,

如果您想计算JSS1级女学生的工资,

array_sum(data['JSS1']['female']);

这将给出付款金额。您也可以像这样计算其他值。