Laravel 雄辩地查询 groupBy 类别与 sum 和 sortBy sum

问题描述 投票:0回答:1

我有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();

也许我制作的刀片表示例会像这样,但按大值和小值的小计排序。请帮忙

laravel sorting laravel-5 eloquent query-builder
1个回答
0
投票

请使用下面列出的解决方案

    $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());
© www.soinside.com 2019 - 2024. All rights reserved.