diff --git a/app/Http/Controllers/Admin/MapelController.php b/app/Http/Controllers/Admin/MapelController.php index ad755a7..f455171 100644 --- a/app/Http/Controllers/Admin/MapelController.php +++ b/app/Http/Controllers/Admin/MapelController.php @@ -1,102 +1,115 @@ has('search')) { - $search = $request->search; - $query->where('nama_mapel', 'like', "%$search%") - ->orWhere('id_mapel', 'like', "%$search%"); - } - - // FILTER BY KELAS (lewat table mengajars) - if ($request->has('filter_kelas') && $request->filter_kelas != '') { - $query->whereHas('mengajars', function($q) use ($request) { - $q->where('id_kelas', $request->filter_kelas); + if ($request->search) { + $query->where(function ($q) use ($request) { + $q->where('nama_mapel', 'like', "%$request->search%") + ->orWhere('id_mapel', 'like', "%$request->search%"); + }); + } + + // FILTER KELAS + if ($request->filter_kelas) { + $query->whereHas('kelas', function ($q) use ($request) { + $q->where('kelas.id_kelas', $request->filter_kelas); }); } - // SHOW PER PAGE $perPage = $request->get('perPage', 10); $mapels = $query->paginate($perPage)->appends($request->all()); - // Ambil semua kelas untuk dropdown filter - $kelass = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get(); + $kelass = Kelas::orderBy('tingkat') + ->orderBy('nama_kelas') + ->get(); return view('admin.mapel.index', compact('mapels', 'kelass')); } + + public function store(Request $request) -{ - $validated = $request->validate([ - 'nama_mapel' => 'required|string|max:100', - 'kelas' => 'nullable|array' - ]); - - $mapel = Mapel::create([ - 'nama_mapel' => $validated['nama_mapel'], - ]); - - if($request->kelas){ - foreach($request->kelas as $kelas){ - $mapel->mengajars()->create([ - 'id_kelas' => $kelas - ]); - } - } - - return redirect()->route('admin.mapel.index') - ->with('success','Data mata pelajaran berhasil ditambahkan!'); -} - - - public function update(Request $request, $id_mapel) -{ - $mapel = Mapel::findOrFail($id_mapel); - - $validated = $request->validate([ - 'nama_mapel' => 'required|string|max:100', - 'kelas' => 'nullable|array' - ]); - - $mapel->update([ - 'nama_mapel' => $validated['nama_mapel'] - ]); - - // hapus relasi lama - $mapel->mengajars()->delete(); - - // buat relasi baru - if($request->kelas){ - foreach($request->kelas as $kelas){ - $mapel->mengajars()->create([ - 'id_kelas' => $kelas - ]); - } - } - - return redirect()->route('admin.mapel.index') - ->with('success','Data mata pelajaran berhasil diupdate!'); -} - - public function destroy($id_mapel) { - $mapel = Mapel::findOrFail($id_mapel); + + $request->validate([ + 'nama_mapel' => 'required|max:100', + 'kelas' => 'required|array' + ]); + + $mapel = Mapel::create([ + 'nama_mapel' => $request->nama_mapel + ]); + + foreach ($request->kelas as $kelas) { + + Mengajar::create([ + 'id_mapel' => $mapel->id_mapel, + 'id_kelas' => $kelas, + 'id_guru' => null + ]); + } + + return redirect()->route('admin.mapel.index') + ->with('success', 'Data mata pelajaran berhasil ditambahkan!'); + } + + + + public function update(Request $request, $id) + { + + $request->validate([ + 'nama_mapel' => 'required|max:100', + 'kelas' => 'required|array' + ]); + + $mapel = Mapel::findOrFail($id); + + $mapel->update([ + 'nama_mapel' => $request->nama_mapel + ]); + + // hapus relasi lama + Mengajar::where('id_mapel', $mapel->id_mapel)->delete(); + + // simpan relasi baru + foreach ($request->kelas as $kelas) { + + Mengajar::create([ + 'id_mapel' => $mapel->id_mapel, + 'id_kelas' => $kelas, + 'id_guru' => null + ]); + } + + return redirect()->route('admin.mapel.index') + ->with('success', 'Data mata pelajaran berhasil diupdate!'); + } + + + + public function destroy($id) + { + + $mapel = Mapel::findOrFail($id); + + Mengajar::where('id_mapel', $id)->delete(); + $mapel->delete(); return redirect()->route('admin.mapel.index') diff --git a/app/Models/Kelas.php b/app/Models/Kelas.php index ec1ce22..2417dce 100644 --- a/app/Models/Kelas.php +++ b/app/Models/Kelas.php @@ -31,4 +31,15 @@ public function mengajars() { return $this->hasMany(Mengajar::class, 'id_kelas', 'id_kelas'); } + + public function mapels() + { + return $this->belongsToMany( + Mapel::class, + 'mengajars', + 'id_kelas', + 'id_mapel' + ); + } + } \ No newline at end of file diff --git a/database/migrations/2026_03_07_031902_fix_mengajar_refactor.php b/database/migrations/2026_03_07_031902_fix_mengajar_refactor.php new file mode 100644 index 0000000..c4ac3b8 --- /dev/null +++ b/database/migrations/2026_03_07_031902_fix_mengajar_refactor.php @@ -0,0 +1,62 @@ +No