月总和 child table 值 laravel

Sum child table value monthly laravel

我在数据库中有 2 个表格

Table安加兰

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

Table彭格鲁然

+----+-------------+------------+---------+----------+
| 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     |
+----+-------------+------------+---------+----------+

我想显示来自 table pengeluaran monthly

的所有 anggaran 数据和 sum jumlah

这是我想要的结果

+--------------------+---------+----------+------+-------+-----+------+------+--------+-----------+---------+----------+----------+
| 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();

这是我的 blade

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

我成功显示了 uraian 但总和没有出现。谁能帮帮我?

在你的控制器中:

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

在你的blade中可以直接求和;

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

有了集合的帮助应该不会太难:

$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

在没有 pengeluaran

的行中显示 0
@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

为了避免在没有$month索引时在null上调用sum(),我在[=17=的第二个参数中传递了一个空集合作为默认值].