Laravel - Расширенный Суммарный Агрегат в Laravel Eloquent - PullRequest
0 голосов
/ 10 июля 2019

У меня есть эта таблица в mysql:

студенческий_плата: идентификатор, студенческий_класс (varchar), студенческий_код (varchar), пол (varchar), сумма (с плавающей точкой), созданный_ат (временная метка)

Название модели: StudentPayment

То, чего я хочу достичь, это:

  1. Если студент_класса является JSS1, он проверяет сумму, уплаченную каждым полом, и помещает ее в соответствующий столбец

  2. Если для student_class используется JSS2, он проверяет сумму, уплаченную каждым полом, и помещает ее в соответствующий столбец

  3. Если для student_class задан SSS1, он проверяет сумму, выплачиваемую всеми, как мужчинами, так и женщинами

  4. Если для student_class задан SSS2, он проверяет сумму, выплачиваемую всеми, как мужчинами, так и женщинами

  5. Суммирует все по вертикали и по горизонтали

  6. Группирует все по дате (create_at)

У меня есть этот запрос в моем контроллере , но я не знаю, как продолжить

    $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 голосов
/ 10 июля 2019

Следующий код даст вам группировку данных о студенческих платежах,

    $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']);

Это даст сумму платежа.Вы можете рассчитать так же и для других.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...