From 949e483f7e6d8ba91e381c35c5938c9b3e334b23 Mon Sep 17 00:00:00 2001 From: RetasyaSalsabila Date: Wed, 11 Feb 2026 10:22:27 +0700 Subject: [PATCH] daftar siswa update (undone) --- .../Controllers/Admin/SiswaController.php | 116 +++++ app/Models/Siswa.php | 10 +- resources/views/admin/siswa/index.blade.php | 428 ++++++++++++++++++ routes/web.php | 3 +- 4 files changed, 552 insertions(+), 5 deletions(-) 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') + + + +

DAFTAR SISWA

+ +
+ +
+ + + +
+ +
+ +
+ +
+ Tampilkan + + + + data + + Filter Kelas + + + + +
+ + {{-- Alert Success --}} + @if(session('success')) + + @endif + + + + + + + + + + + + + + + + @forelse($siswas as $index => $siswa) + + + + + + + + + + + + @empty + + + + @endforelse + +
NoNISNNamaTempat LahirTanggal LahirKelasAksi
{{ $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 }} + + +
+ @csrf + @method('DELETE') + +
+
Belum ada data siswa
+ +
+ {{ $siswas->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 b28dcf7..2a3be5e 100644 --- a/routes/web.php +++ b/routes/web.php @@ -8,9 +8,10 @@ use App\Http\Controllers\Admin\AdminController; use App\Http\Controllers\Admin\GuruController; use App\Http\Controllers\Admin\KelasController; +use App\Http\Controllers\Admin\SiswaController; // use App\Http\Controllers\GuruController; -use App\Http\Controllers\SiswaController; +// use App\Http\Controllers\SiswaController; // use App\Http\Controllers\KelasController; use App\Http\Controllers\MapelController; use App\Http\Controllers\ChallengeController;