Сумма дочерней таблицы, значение месячного ларавелла - PullRequest
0 голосов
/ 06 ноября 2019

У меня есть 2 таблицы в базе данных

Таблица Anggaran

+----+-------------------+
| id |      uraian       |
+----+-------------------+
|  1 | Pembangunan Jalan |
|  2 | Material Bangunan |
+----+-------------------+

Таблица Pengeluaran

+----+-------------+------------+---------+----------+
| id | anggaran_id |   waktu    | jumlah  | penerima |
+----+-------------+------------+---------+----------+
|  1 |           2 | 2019-10-12 | 1000000 | Dadang   |
|  2 |           2 | 2019-10-28 | 1500000 | Bambang  |
|  3 |           2 | 2019-11-12 | 3000000 | Tono     |
|  4 |           2 | 2019-12-10 | 2500000 | Agus     |
|  5 |           2 | 2019-12-20 | 1500000 | Bajo     |
+----+-------------+------------+---------+----------+

iхочу отобразить все анггаранские данные с суммой джумлы из таблицы pengeluaran ежемесячно

здесь результат я хочу

+--------------------+---------+----------+------+-------+-----+------+------+--------+-----------+---------+----------+----------+
| Uraian             | January | February | March| April | May | June | July | August | September | October | November | December |
+--------------------+---------+----------+------+-------+-----+------+------+--------+-----------+---------+----------+----------+
|  Pembangunan Jalan |         |          |      |       |     |      |      |        |           |         |          |          |
|  Material Bangunan |         |          |      |       |     |      |      |        |           | 2500000 | 3000000  | 4000000  |
+--------------------+---------+----------+------+-------+-----+------+------+--------+-----------+---------+----------+----------+

я использую код, который имеет много связей, но сумма не показывается

здесьмой контроллер

$anggaran = Anggaran::with(['pengeluaran' => function($query){
          $query->select(
              DB::raw('sum(jumlah) as sum'),
              DB::raw("Monthname(waktu) as month"))
          ->groupBy('month');
         }])
        ->get();

здесь мой клинок

@foreach($anggaran as $angaran)
      <tr>
        <td>{{$angaran->uraian}}</td>
        @foreach($angaran->pengeluaran as $p)
        <td>{{$p->sum}}</td>
        @endforeach
      </tr>
 @endforeach

Я успешно показываю uraian, но сумма не появляется. Кто-нибудь может мне помочь?

Ответы [ 2 ]

0 голосов
/ 06 ноября 2019

С помощью коллекций это не должно быть слишком сложно:

$anggaran = Anggaran::with(['pengeluaran' => function ($query) {
    $query->select('anggaran_id', 'jumlah')
          ->selectRaw("month(waktu) as month"); // Get the month number so it's easier to sort
}])
->get();
@foreach($anggaran as $angaran)
  <tr>
    <td>{{ $angaran->uraian }}</td>
    @foreach($angaran->pengeluaran->groupBy('month') as $month => $pengeluaran)
      <td>{{ $pengeluaran->sum('jumlah') }}</td>
    @endforeach
  </tr>
@endforeach

Отображение 0 в строках, которые не имеют pengeluaran

@foreach($anggaran as $angaran)
  <tr>
    <td>{{ $angaran->uraian }}</td>
    @foreach(range(1,12) as $month)
      <td>
        {{ $angaran->pengeluaran->groupBy('month')->get($month, collect())->sum('jumlah') }}
      </td>
    @endforeach
  </tr>
@endforeach

В порядкечтобы не вызывать sum() для null при отсутствии индекса $month, я передаю пустую коллекцию в качестве значения по умолчанию во втором параметре get().

0 голосов
/ 06 ноября 2019

В вашем контроллере:

$anggaran = Anggaran::with(['pengeluaran'])->get();

В вашем клинке вы можете суммировать его напрямую;

@foreach($anggaran as $angaran)
      <tr>
        <td>{{$angaran->uraian}}</td>
        <td>{{$angaran->pengeluaran->sum('jumlah') }}</td>
      </tr>
 @endforeach
...