"assign", "finished_by" => "finished_by", default => "requirement_id" }; $groupTasks = $project->tasks()->with(['assignTo'])->get()->groupBy($groupKey); $statusItems = array_column(TaskApprovalStatus::cases(), 'value'); $items = []; $groupIds = []; foreach ($groupTasks as $groupId => $tasks) { $groupItems = []; foreach ($statusItems as $status) { $groupItems[$status] = []; } foreach ($tasks as $task) { $groupItems[$task->approval_status][] = new KanbanTaskResource($task); } $items[$groupId ?: "empty"] = $groupItems; $groupIds[] = $groupId; } $collection=$this->getKanbanGroupData($groupIds, $group); $collection->each(function ($item, $key)use ($collection,$items) { $collection[$key]=(object)array_merge($collection[$key]->toArray(),$items[$collection[$key]->id]); }); if (isset($items['empty'])){//当存在empty时,单独在末尾添加改task $collection->push($items['empty']); } return [ 'group_data' => $collection, // 'group' => $group, // 'tasks' => $items, 'status_items' => $statusItems, ]; } 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" => User::query()->whereIn("id", $ids)->get(['id','name','username']), default => Requirement::query()->whereIn("id", $ids) ->when($orderBy, fn($query) => $query->orderBy(...$orderBy)) ->get([ 'id', 'title', 'priority', 'status' ]), }; } }