diff --git a/app/Http/Controllers/Admin/SiswaController.php b/app/Http/Controllers/Admin/SiswaController.php index e69de29..36d439f 100644 --- a/app/Http/Controllers/Admin/SiswaController.php +++ b/app/Http/Controllers/Admin/SiswaController.php @@ -0,0 +1,116 @@ + +namespace App\Http\Controllers\Admin; + +use App\Http\Controllers\Controller; +use App\Models\Siswa; +use App\Models\Kelas; +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Hash; + +class SiswaController extends Controller +{ + public function index(Request $request) + { + $query = Siswa::with('kelas'); // Eager load relasi kelas + + // SEARCH + if ($request->has('search')) { + $search = $request->search; + $query->where('nama', 'like', "%$search%") + ->orWhere('nisn', 'like', "%$search%"); + } + + // FILTER BY KELAS + if ($request->has('filter_kelas') && $request->filter_kelas != '') { + $query->where('id_kelas', $request->filter_kelas); + } + + // SHOW PER PAGE + $perPage = $request->get('perPage', 10); + + $siswas = $query->paginate($perPage)->appends($request->all()); + + // Ambil semua kelas untuk dropdown filter + $kelass = Kelas::orderBy('tingkat')->orderBy('nama_kelas')->get(); + + return view('admin.siswa.index', compact('siswas', 'kelass')); + } + + public function store(Request $request) + { + $validated = $request->validate([ + 'nisn' => 'required|string|max:20|unique:siswas,nisn', + 'nama' => 'required|string|max:100', + 'tempat_lahir' => 'required|string|max:50', + 'tanggal_lahir' => 'required|date', + 'id_kelas' => 'required|exists:kelas,id_kelas', + 'password' => 'required|string|min:6', + ], [ + 'nisn.required' => 'NISN wajib diisi', + 'nisn.unique' => 'NISN sudah terdaftar', + 'nama.required' => 'Nama wajib diisi', + 'tempat_lahir.required' => 'Tempat lahir wajib diisi', + 'tanggal_lahir.required' => 'Tanggal lahir wajib diisi', + 'id_kelas.required' => 'Kelas wajib dipilih', + 'id_kelas.exists' => 'Kelas tidak valid', + 'password.required' => 'Password wajib diisi', + 'password.min' => 'Password minimal 6 karakter', + ]); + + Siswa::create([ + 'nisn' => $validated['nisn'], + 'nama' => $validated['nama'], + 'tempat_lahir' => $validated['tempat_lahir'], + 'tanggal_lahir' => $validated['tanggal_lahir'], + 'id_kelas' => $validated['id_kelas'], + 'password' => Hash::make($validated['password']), + ]); + + return redirect()->route('admin.siswa.index') + ->with('success', 'Data siswa berhasil ditambahkan!'); + } + + public function update(Request $request, $nisn) + { + $siswa = Siswa::findOrFail($nisn); + + $validated = $request->validate([ + 'nama' => 'required|string|max:100', + 'tempat_lahir' => 'required|string|max:50', + 'tanggal_lahir' => 'required|date', + 'id_kelas' => 'required|exists:kelas,id_kelas', + 'password' => 'nullable|string|min:6', + ], [ + 'nama.required' => 'Nama wajib diisi', + 'tempat_lahir.required' => 'Tempat lahir wajib diisi', + 'tanggal_lahir.required' => 'Tanggal lahir wajib diisi', + 'id_kelas.required' => 'Kelas wajib dipilih', + 'id_kelas.exists' => 'Kelas tidak valid', + 'password.min' => 'Password minimal 6 karakter', + ]); + + $siswa->nama = $validated['nama']; + $siswa->tempat_lahir = $validated['tempat_lahir']; + $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']); + } + + $siswa->save(); + + return redirect()->route('admin.siswa.index') + ->with('success', 'Data siswa berhasil diupdate!'); + } + + public function destroy($nisn) + { + $siswa = Siswa::findOrFail($nisn); + $siswa->delete(); + + return redirect()->route('admin.siswa.index') + ->with('success', 'Data siswa berhasil dihapus!'); + } +} diff --git a/app/Models/Siswa.php b/app/Models/Siswa.php index ec19a81..e008dff 100644 --- a/app/Models/Siswa.php +++ b/app/Models/Siswa.php @@ -9,28 +9,30 @@ class Siswa extends Model { use HasFactory; - protected $table = 'siswas'; - + protected $table = 'siswas'; + protected $primaryKey = 'nisn'; + public $incrementing = false; + protected $keyType = 'string'; protected $fillable = [ 'nisn', - 'password', 'nama', 'tempat_lahir', 'tanggal_lahir', 'id_kelas', + 'password', ]; protected $hidden = [ 'password', ]; + // 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/siswa/index.blade.php b/resources/views/admin/siswa/index.blade.php index e69de29..e0ec399 100644 --- a/resources/views/admin/siswa/index.blade.php +++ b/resources/views/admin/siswa/index.blade.php @@ -0,0 +1,428 @@ + +@extends('admin.layouts.app') + +@section('title', 'Daftar Siswa') + +@section('content') + + + +
| No | +NISN | +Nama | +Tempat Lahir | +Tanggal Lahir | +Kelas | +Aksi | +
|---|---|---|---|---|---|---|
| {{ $siswas->firstItem() + $index }} | +{{ $siswa->nisn }} | +{{ $siswa->nama }} | +{{ $siswa->tempat_lahir }} | +{{ \Carbon\Carbon::parse($siswa->tanggal_lahir)->format('d M Y') }} | +{{ $siswa->kelas->tingkat }} - {{ $siswa->kelas->nama_kelas }} | + ++ + + + | +
| Belum ada data siswa | +||||||