diff --git a/app/Http/Controllers/Api/Admin/ItemFieldController.php b/app/Http/Controllers/Api/Admin/ItemFieldController.php index b3de3e9c..8282c656 100644 --- a/app/Http/Controllers/Api/Admin/ItemFieldController.php +++ b/app/Http/Controllers/Api/Admin/ItemFieldController.php @@ -161,11 +161,16 @@ public function customFields(Request $request): View } // getFields() 메서드 사용 (시스템 + 커스텀 모두 조회, 시스템 필드 우선 정렬) - $fields = $this->service->getFields($tenantId, $request->all()); + $filters = $request->all(); + $fields = $this->service->getFields($tenantId, $filters); + + // per_page 값을 명시적으로 뷰에 전달 (셀렉트박스 selected 상태 유지용) + $perPage = !empty($filters['per_page']) ? (int) $filters['per_page'] : 20; return view('item-fields.partials.custom-fields', [ 'fields' => $fields, 'sourceTables' => $sourceTables, + 'perPage' => $perPage, ]); } diff --git a/app/Services/ItemFieldSeedingService.php b/app/Services/ItemFieldSeedingService.php index 597dbe98..fa5e7eba 100644 --- a/app/Services/ItemFieldSeedingService.php +++ b/app/Services/ItemFieldSeedingService.php @@ -333,9 +333,9 @@ public function resetAll(int $tenantId): array /** * 필드 목록 조회 (시스템 + 커스텀) * - * @param array $filters source_table, field_type, field_category (system|custom), search + * @param array $filters source_table, field_type, field_category (system|custom), search, per_page */ - public function getFields(int $tenantId, array $filters = []): Collection + public function getFields(int $tenantId, array $filters = []): \Illuminate\Contracts\Pagination\LengthAwarePaginator { $query = ItemField::withTrashed()->where('tenant_id', $tenantId); @@ -367,11 +367,15 @@ public function getFields(int $tenantId, array $filters = []): Collection }); } + // 페이지당 항목 수 (기본 20개) + $perPage = !empty($filters['per_page']) ? (int) $filters['per_page'] : 20; + // 시스템 필드 우선 정렬 (is_common DESC), 그 다음 source_table, order_no return $query->orderByDesc('is_common') ->orderBy('source_table') ->orderBy('order_no') - ->get(); + ->paginate($perPage) + ->withQueryString(); } /**