Hi All,
I am breaking down an old SQL View that summarizes a transaction table for clients across different date ranges.
Ive recreated these smaller views into query builder laravel queries, and now i need to combine them (multi-dimensional array with date ranges as keys, then client name/sum as k => v pair) i know i can do this with a foreach - but wondering in general if thre is a better way to write these queries and combine them (maybe collections & map ?)
Thanks
$today = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as today')
)->where('t.Transaction', '<', 0)
->whereDay('t.Timestamp', Carbon::now()->day)
->whereMonth('t.Timestamp', Carbon::now()->month)
->whereYear('t.Timestamp', Carbon::now()->year)
->groupBy('c.Client_Name')
->get();
$yesterday = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as yesterday')
)->where('t.Transaction', '<', 0)
->whereDay('t.Timestamp', Carbon::now()->subDays(1))
->whereMonth('t.Timestamp', Carbon::now()->month)
->whereYear('t.Timestamp', Carbon::now()->year)
->groupBy('c.Client_Name')
->get();
$this_week = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as this_week')
)->where('t.Transaction', '<', 0)
->whereBetween('t.Transaction', [Carbon::now()->StartOfWeek(Carbon::MONDAY)->format('Y-m-d'), Carbon::now()->endOfWeek(Carbon::SATURDAY)->format('Y-m-d')])
->groupBy('c.Client_Name')
->get();
$this_month = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as this_month')
)->where('t.Transaction', '<', 0)
->whereMonth('t.Timestamp', Carbon::now()->month)
->whereYear('t.Timestamp', Carbon::now()->year)
->groupBy('c.Client_Name')
->get();
$this_year = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as this_year')
)->where('t.Transaction', '<', 0)
->whereYear('t.Timestamp', Carbon::now()->year)
->groupBy('c.Client_Name')
->get();
$all_time = DB::table('Client_Accounts as c')
->leftJoin('Client_Transactions as t', 't.ClientID', 'c.ClientID')
->select(
'Client_Name as Client',
DB::RAW('SUM(t.Transaction) as all_time')
)->where('t.Transaction', '<', 0)
->groupBy('c.Client_Name')
->get();