"assign", "finished_by" => "finished_by", default => "requirement_id" }; $groupTasks = $project->tasks()->with(['assignTo'])->get()->groupBy($groupKey); $statusItems = array_column(ProjectStatus::cases(), 'value'); $items = []; $groupIds = []; $groupItems=[]; foreach ($groupTasks as $groupId => $tasks) { $groupItems = []; foreach ($statusItems as $status) { $groupItems[$status] = []; } foreach ($tasks as $task) { $groupItems[$task->status][] = new KanbanTaskResource($task); } $items[$groupId ?: "empty"] = $groupItems; $groupIds[] = $groupId; } $kanbans=$this->getKanbanGroupData($groupIds, $group); foreach ($kanbans as $kanban){ if(isset($items[$kanban->id])){ $kanban->value = $items[$kanban->id]; } } return [ "noEmpty" =>$kanbans, "empty" => $items["empty"]??[] ]; } protected function getKanbanGroupData(array $ids, string $group) { $orderBy = match ($group) { "requirement_asc" => ['id', 'asc'], "requirement_desc" => ['id', 'desc'], "requirement_priority_asc" => ['priority', 'asc'], "requirement_priority_desc" => ['priority', 'desc'], default => null }; return match ($group) { "assign", "finished_by" => UserProfileResource::collection(User::query()->whereIn("id", $ids)->get()), default => Requirement::query()->whereIn("id", $ids) ->when($orderBy, fn($query) => $query->orderBy(...$orderBy)) ->get([ 'id', 'title', 'priority', 'status' ]), }; } }