From e1f48015516306679b6b070adc65b8e8842d75c0 Mon Sep 17 00:00:00 2001 From: RetasyaSalsabila Date: Wed, 11 Feb 2026 20:43:22 +0700 Subject: [PATCH] siswa fixed, mapel updated (undone) --- .../Controllers/Admin/MapelController.php | 97 ++++++ .../Controllers/Admin/SiswaController.php | 6 +- app/Models/Mapel.php | 13 +- app/Models/Mengajar.php | 21 +- resources/views/admin/mapel/index.blade.php | 313 ++++++++++++++++++ routes/web.php | 3 +- 6 files changed, 446 insertions(+), 7 deletions(-) diff --git a/app/Http/Controllers/Admin/MapelController.php b/app/Http/Controllers/Admin/MapelController.php index e69de29..b9ea6f7 100644 --- a/app/Http/Controllers/Admin/MapelController.php +++ b/app/Http/Controllers/Admin/MapelController.php @@ -0,0 +1,97 @@ +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); + }); + } + + // 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(); + + return view('admin.mapel.index', compact('mapels', 'kelass')); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'nama_mapel' => 'required|string|max:100', + ], [ + 'nama_mapel.required' => 'Nama mata pelajaran wajib diisi', + ]); + + // Auto-generate id_mapel + $lastMapel = Mapel::orderBy('id_mapel', 'desc')->first(); + + if ($lastMapel) { + $lastNumber = (int) substr($lastMapel->id_mapel, 2); // Ambil angka setelah "MP" + $newNumber = $lastNumber + 1; + } else { + $newNumber = 1; + } + + $newIdMapel = 'MP' . str_pad($newNumber, 3, '0', STR_PAD_LEFT); // MP001, MP002, dst + + Mapel::create([ + 'id_mapel' => $newIdMapel, + 'nama_mapel' => $validated['nama_mapel'], + ]); + + 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', + ], [ + 'nama_mapel.required' => 'Nama mata pelajaran wajib diisi', + ]); + + $mapel->update($validated); + + return redirect()->route('admin.mapel.index') + ->with('success', 'Data mata pelajaran berhasil diupdate!'); + } + + public function destroy($id_mapel) + { + $mapel = Mapel::findOrFail($id_mapel); + $mapel->delete(); + + return redirect()->route('admin.mapel.index') + ->with('success', 'Data mata pelajaran berhasil dihapus!'); + } +} diff --git a/app/Http/Controllers/Admin/SiswaController.php b/app/Http/Controllers/Admin/SiswaController.php index 36d439f..431c7ef 100644 --- a/app/Http/Controllers/Admin/SiswaController.php +++ b/app/Http/Controllers/Admin/SiswaController.php @@ -1,3 +1,4 @@ +has('search')) { @@ -94,7 +95,6 @@ public function update(Request $request, $nisn) $siswa->tanggal_lahir = $validated['tanggal_lahir']; $siswa->id_kelas = $validated['id_kelas']; - // Update password hanya jika diisi if ($request->filled('password')) { $siswa->password = Hash::make($validated['password']); } @@ -113,4 +113,4 @@ public function destroy($nisn) return redirect()->route('admin.siswa.index') ->with('success', 'Data siswa berhasil dihapus!'); } -} +} \ No newline at end of file diff --git a/app/Models/Mapel.php b/app/Models/Mapel.php index ef0efe2..a3b2336 100644 --- a/app/Models/Mapel.php +++ b/app/Models/Mapel.php @@ -10,7 +10,6 @@ class Mapel extends Model use HasFactory; protected $table = 'mapels'; - protected $primaryKey = 'id_mapel'; public $incrementing = false; protected $keyType = 'string'; @@ -19,4 +18,16 @@ class Mapel extends Model 'id_mapel', 'nama_mapel', ]; + + // Relasi ke Mengajar (mapel diajar di kelas mana aja lewat guru) + public function mengajars() + { + return $this->hasMany(Mengajar::class, 'id_mapel', 'id_mapel'); + } + + // Relasi many-to-many ke Kelas (lewat mengajars) + public function kelas() + { + return $this->belongsToMany(Kelas::class, 'mengajars', 'id_mapel', 'id_kelas'); + } } \ No newline at end of file diff --git a/app/Models/Mengajar.php b/app/Models/Mengajar.php index dad4be7..f643a39 100644 --- a/app/Models/Mengajar.php +++ b/app/Models/Mengajar.php @@ -9,8 +9,7 @@ class Mengajar extends Model { use HasFactory; - protected $table = 'mengajars'; - + protected $table = 'mengajars'; protected $primaryKey = 'id_mengajar'; protected $fillable = [ @@ -18,4 +17,22 @@ class Mengajar extends Model 'id_mapel', 'id_kelas', ]; + + // Relasi ke Guru + public function guru() + { + return $this->belongsTo(Guru::class, 'nip', 'nip'); + } + + // Relasi ke Mapel + public function mapel() + { + return $this->belongsTo(Mapel::class, 'id_mapel', 'id_mapel'); + } + + // Relasi ke Kelas + public function kelas() + { + return $this->belongsTo(Kelas::class, 'id_kelas', 'id_kelas'); + } } \ No newline at end of file diff --git a/resources/views/admin/mapel/index.blade.php b/resources/views/admin/mapel/index.blade.php index e69de29..ee2f50a 100644 --- a/resources/views/admin/mapel/index.blade.php +++ b/resources/views/admin/mapel/index.blade.php @@ -0,0 +1,313 @@ +@extends('admin.layouts.app') + +@section('title', 'Daftar Mata Pelajaran') + +@section('content') + + + +

DAFTAR MATA PELAJARAN

+ +
+ +
+ + + +
+ +
+ +
+ +
+ Tampilkan + + + + data + + Filter Kelas + + + + +
+ + {{-- Alert Success --}} + @if(session('success')) + + @endif + + + + + + + + + + + + + @forelse($mapels as $index => $mapel) + + + + + + + + + @empty + + + + @endforelse + +
NoID MapelNama Mata PelajaranAksi
{{ $mapels->firstItem() + $index }}{{ $mapel->id_mapel }}{{ $mapel->nama_mapel }} + + +
+ @csrf + @method('DELETE') + +
+
Belum ada data mata pelajaran
+ +
+ {{ $mapels->links() }} +
+ +
+ +{{-- MODAL TAMBAH --}} + + +{{-- MODAL EDIT --}} + + + + +@if ($errors->any()) + +@endif + +@endsection \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 2a3be5e..bb5d751 100644 --- a/routes/web.php +++ b/routes/web.php @@ -9,11 +9,12 @@ use App\Http\Controllers\Admin\GuruController; use App\Http\Controllers\Admin\KelasController; use App\Http\Controllers\Admin\SiswaController; +use App\Http\Controllers\Admin\MapelController; // use App\Http\Controllers\GuruController; // use App\Http\Controllers\SiswaController; // use App\Http\Controllers\KelasController; -use App\Http\Controllers\MapelController; +// use App\Http\Controllers\MapelController; use App\Http\Controllers\ChallengeController; use App\Http\Controllers\LeaderboardController;