我有3个相关的表:
桌子类别:
+-----+---------------+
| id | nama_kategori |
+-----+---------------+
| 1 | Sayur |
| 2 | daging |
| 3 | buah |
+-----+---------------+
巴浪桌
+-----+-------------+-------------+
| id | nama_barang | id_kategori |
+-----+-------------+-------------+
| 1 | Sayur 1 | 1 |
| 2 | Sayur 2 | 1 |
| 3 | Daging Ayam | 2 |
| 4 | Apple | 3 |
| 5 | Banana | 3 |
+-----+-------------+-------------+
表barang_keluar
+-----+-------------+-----------+---------+
| id | tgl_keluar | id_barang | jml_bk |
+-----+-------------+-----------+---------+
| 1 | 02-03-2021 | 1 | 200 |
| 2 | 04-03-2021 | 2 | 100 |
| 3 | 12-03-2021 | 1 | 100 |
| 4 | 15-03-2021 | 3 | 500 |
| 5 | 20-03-2021 | 2 | 100 |
| 6 | 25-03-2021 | 1 | 100 |
| 6 | 25-03-2021 | 4 | 100 |
| 6 | 25-03-2021 | 5 | 100 |
+-----+-------------+-----------+---------+
我现在所做的查询如下所示:
$kategorix='All';
$bulan = '2021-03';
$bulanx=Carbon::parse($bulan)->format('Y-m');
$kategoriy=DB::table('barang_keluar')->join('barang','barang.id','=','barang_keluar.id_barang')
->join('kategori','kategori.id','=','barang.id_kategori')
->select('barang_keluar.id_barang',
'barang.id_kategori',
'kategori.nama_kategori',
DB::raw('sum(jml_bk) as total'))
->where(DB::raw("date_format(tgl_keluar,'%Y-%m')"), '=', $bulanx)
->groupBy('id_barang','id_kategori','nama_kategori')
->orderBy('tgl_keluar')
->orderBy('total')
->get();
$barang = $kategoriy->groupBy('id_kategori');
$array = collect($barang)->sort($barang->sum('total'))->reverse()->toArray();
我得到的结果:
array:5 [▼
1 => array:1 [▼
0 => {#939 ▼
+"id_barang": 1
+"id_kategori": 1
+"nama_kategori": "Sayur 1"
+"total": "400"
}
0 => {#939 ▼
+"id_barang": 2
+"id_kategori": 1
+"nama_kategori": "Sayur 2"
+"total": "200"
}
]
2 => array:1 [▼
0 => {#943 ▼
+"id_barang": 3
+"id_kategori": 2
+"nama_kategori": "Daging"
+"total": "500"
}
]
3 => array:1 [▼
0 => {#945 ▼
+"id_barang": 4
+"id_kategori": 3
+"nama_kategori": "Apple"
+"total": "100"
}
0 => {#945 ▼
+"id_barang": 5
+"id_kategori": 3
+"nama_kategori": "Banana"
+"total": "100"
}
]
]
如何从
By('subtotal')
得到排序groupBy('category_id')
的结果。请帮忙
我尝试添加查询数组并像这样排序。但结果还是和上面一样
$array = collect($barang)->sort($barang->sum('total'))->reverse()->toArray();
也许我制作的刀片表示例会像这样,但按大值和小值的小计排序。请帮忙
请使用下面列出的解决方案
$kategorix='All';
$bulan = '2021-03';
$bulanx=Carbon::parse($bulan)->format('Y-m');
$kategoriy=DB::table('barang_keluar')->join('barang','barang.id','=','barang_keluar.id_barang')
->join('kategori','kategori.id','=','barang.id_kategori')
->select('barang_keluar.id_barang',
'barang.id_kategori',
'kategori.nama_kategori',
DB::raw('sum(jml_bk) as total'))
->where(DB::raw("date_format(tgl_keluar,'%Y-%m')"), '=', $bulanx)
->groupBy('id_barang','id_kategori','nama_kategori')
->orderBy('tgl_keluar')
->get();
$barang = $kategoriy->groupBy('id_kategori');
$category = $barang->map(function ($testcollected) {
$sum = $testcollected->groupBy('id_kategori')->map(function ($items) {
return $items->sum('total');
});
$testcollected->put('sub_total', $sum);
return $testcollected;
});
print_r($category->toArray());