where('item', $item)->get(['sub_item', 'sub_item_str']); $query = DB::table('road_items_projects') ->selectRaw('province_id, province_fa'); foreach ($subItems as $subItem) { $query->selectRaw(" COUNT(CASE WHEN sub_item = {$subItem->sub_item} THEN 1 END) as Count_{$subItem->sub_item}, SUM(CASE WHEN sub_item = {$subItem->sub_item} THEN sub_item_data END) as Sum_{$subItem->sub_item} "); } $query->where('item', '=', $item) ->where('status', '=', 1) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->groupBy('province_id', 'province_fa') ->orderBy('province_id'); $activities = $query->get(); return collect([ 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, 'titles' => $subItems->pluck('sub_item_str') ]); } public function provinceActivityPerSubItem(int $item, string $fromDate, string $toDate, int $provinceId): Collection { $subItems = InfoItem::subItems($item); $query = DB::table('road_items_projects') ->selectRaw('province_id, province_fa, user_name as city_fa, city_id'); foreach ($subItems as $key => $name) { $query->selectRaw(" COUNT(CASE WHEN sub_item = {$key} THEN 1 END) as {$name}Count, SUM(CASE WHEN sub_item = {$key} THEN sub_item_data END) as {$name}Sum "); } $query->where('item', '=', $item) ->where('status', '=', 1) ->where('province_id', '=', $provinceId) ->whereBetween('activity_date_time', [$fromDate, $toDate]) ->groupBy('city_id') ->orderBy('province_id'); $activities = $query->get(); return collect([ 'data' => $activities, 'fromDate' => $fromDate, 'toDate' => $toDate, ]); } }