input('action') === 'reset') { return redirect()->route('zones'); } // ソート設定 $sort = $request->input('sort', 'zone_id'); $sort_type = $request->input('sort_type', 'desc'); // ベースクエリ $query = Zone::query(); // === 絞り込み条件 === if ($request->filled('zone_id')) { $query->where('zone_id', $request->zone_id); } if ($request->filled('zone_name')) { $query->where('zone_name', 'LIKE', "%{$request->zone_name}%"); } if ($request->filled('park_id')) { $query->where('park_id', $request->park_id); } if ($request->filled('ptype_id')) { $query->where('ptype_id', $request->ptype_id); } if ($request->filled('psection_id')) { $query->where('psection_id', $request->psection_id); } if ($request->has('use_flag') && $request->use_flag !== '') { $query->where('use_flag', $request->use_flag); } // ページネーション $zones = $query->orderBy($sort, $sort_type)->paginate(20); // === 下拉选单用の一覧データ === $parkList = DB::table('park')->pluck('park_name', 'park_id'); $ptypeList = DB::table('ptype')->pluck('ptype_id', 'ptype_id'); // 暂时显示 ID $psectionList = DB::table('psection')->pluck('psection_id', 'psection_id'); // 暂时显示 ID return view('admin.zones.list', compact( 'zones', 'sort', 'sort_type', 'parkList', 'ptypeList', 'psectionList' )); } /** * 新規登録 */ public function add(Request $request) { if ($request->isMethod('post')) { $data = $this->validateZone($request); Zone::create($data); return redirect()->route('zones') ->with('success', 'ゾーンを登録しました'); } $zone = new Zone(); return view('admin.zones.add', compact('zone')); } /** * 編集 */ public function edit($id, Request $request) { $zone = Zone::findOrFail($id); if ($request->isMethod('post')) { $data = $this->validateZone($request); $zone->update($data); return redirect()->route('zones') ->with('success', 'ゾーンを更新しました'); } return view('admin.zones.edit', compact('zone')); } /** * 詳細表示 */ public function info($id) { $zone = Zone::findOrFail($id); return view('admin.zones.info', compact('zone')); } /** * 削除 */ public function delete(Request $request) { $id = $request->input('id'); if ($id) { Zone::destroy($id); return redirect()->route('zones')->with('success', 'ゾーンを削除しました'); } return redirect()->route('zones')->with('error', '削除対象が指定されていません'); } /** * バリデーション共通化 */ private function validateZone(Request $request) { return $request->validate([ 'zone_name' => 'required|string|max:50', 'park_id' => 'required|integer', 'ptype_id' => 'nullable|integer', 'psection_id' => 'nullable|integer', 'zone_number' => 'nullable|integer|min:0', 'zone_standard' => 'nullable|integer|min:0', 'zone_tolerance' => 'nullable|integer|min:0', 'use_flag' => 'nullable|boolean', 'memo' => 'nullable|string|max:255', ]); } }