hi
$year = $request->year; $month = $request->month; // dd($year); $recordsNew = DB::table('dbo.sales') ->leftjoin('dbo.stores', 'dbo.sales.storename', '=', 'dbo.stores.storename') ->when(!empty($request->store), function ($query) use ($request) { return $query->where('dbo.sales.storename', 'like', '%' . $request->store . '%'); }) ->where(DB::raw('YEAR(BillDate)'), $year) ->where(DB::raw('MONTH(BillDate)'), $month) ->select(DB::raw("SUM(TotalPricewithTax) as totalpricewithtax"), 'dbo.sales.storename', DB::raw('CAST(BillDate as DATE) as datenew')) ->groupBy(DB::raw('CAST(BillDate as DATE)'),'dbo.sales.storename') ->orderBy(DB::raw("CAST(BillDate as DATE)"), 'asc') ->get();
iam getting data below like this
datenew storename totalpricewithtax ---------- --------- ------------------- 2021-01-01 A 5260 2021-01-01 B 6520 2021-01-01 C 7320 2021-01-01 D 6590 2021-01-02 A 5963 2021-01-02 B 2000 2021-01-02 C 1963 2021-01-02 D 2963 - - - go on
but i want to display vertical to horizontal below like this
datenew A B C D ----- ---- ---- -- go on (no of stores) ---------- --------- --------- --------- ---------- 2021-01-01 5260 6520 7320 6590 2021-01-02 5963 2000 1963 2963
how to achive this, can anybody help in this scenario,
Advertisement
Answer
Something like this will do it:
$recordsKeyedByDate = []; foreach ($recordsNew as $record) { $recordsKeyedByDate[$record->datenew][$record->storename] = $record->totalpricewithtax; } $storeNames = ['A', 'B', ...]; foreach ($recordsKeyedByDate as $date => $recordsKeyedByStoreName) { // output $date foreach ($storeNames as $storeName) { // output $recordsKeyedByStoreName[$storeName]->totalpricewithtax } }