mavisland Builder::fromSub ve Builder::unionAll() yöntemleri kullanılarak yazılabilir ama yaptığınız şekilde raw yazmak builder ile yapılandan daha anlaşılır kalacaktır 🙂
DB::query()
->fromSub(
DB::table('sepetler')
->selectRaw("
DATE_FORMAT(islem_tarihi, '%Y-%m') AS gecen_ay,
SUM(toplam_tutar) AS gecen_ay_satis_toplami
")
->whereRaw("DATE_FORMAT(islem_tarihi, '%Y-%m') = DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m')")
->groupByRaw("DATE_FORMAT(islem_tarihi, '%Y-%m')")
->unionAll(
DB::query()
->selectRaw("
DATE_FORMAT(DATE_SUB(CURRENT_DATE, INTERVAL 1 MONTH), '%Y-%m') AS gecen_ay,
0 AS gecen_ay_satis_toplami
")
),
'subquery'
)
->selectRaw("
gecen_ay,
SUM(gecen_ay_satis_toplami) AS gecen_ay_satis_toplami
")
->groupBy('gecen_ay')
->get();
Şahsen raw olanı tercih ederim.