From 177ed1126035451a9e6b8e6d2d694373d014e9fd Mon Sep 17 00:00:00 2001 From: Syifa Date: Thu, 24 Jul 2025 16:38:12 +0700 Subject: [PATCH] Penggunaan Eloquent ORM(Object-Relational Mapping) --- app/Http/Controllers/SiswaController.php | 64 +++++-------------- app/Models/Kelas.php | 19 ++++++ app/Models/Siswa.php | 12 ++-- .../2025_07_22_093135_create_siswa_table.php | 31 --------- .../2025_07_24_025000_create_kelas_table.php | 19 ++++++ .../2025_07_24_025545_create_siswas_table.php | 22 +++++++ database/seeders/DatabaseSeeder.php | 3 - database/seeders/KelasSeeder.php | 29 +++++++++ database/seeders/SiswaSeeder.php | 26 ++++---- resources/views/siswa/create.blade.php | 17 +++-- resources/views/siswa/edit.blade.php | 35 +++++++--- resources/views/siswa/index.blade.php | 2 +- 12 files changed, 169 insertions(+), 110 deletions(-) create mode 100644 app/Models/Kelas.php delete mode 100644 database/migrations/2025_07_22_093135_create_siswa_table.php create mode 100644 database/migrations/2025_07_24_025000_create_kelas_table.php create mode 100644 database/migrations/2025_07_24_025545_create_siswas_table.php create mode 100644 database/seeders/KelasSeeder.php diff --git a/app/Http/Controllers/SiswaController.php b/app/Http/Controllers/SiswaController.php index 5b87451..ad8dc93 100644 --- a/app/Http/Controllers/SiswaController.php +++ b/app/Http/Controllers/SiswaController.php @@ -3,96 +3,66 @@ namespace App\Http\Controllers; use App\Models\Siswa; +use App\Models\Kelas; use Illuminate\Http\Request; class SiswaController extends Controller { public function index() { - $siswas = Siswa::all(); + $siswas = Siswa::with('kelas')->get(); return view('siswa.index', compact('siswas')); } public function create() { - return view('siswa.create'); + $kelases = Kelas::all(); + return view('siswa.create', compact('kelases')); } public function store(Request $request) { $request->validate([ 'nama' => 'required|string|max:255', - 'kelas' => 'required|string|max:50', + 'kelas_id' => 'required|exists:kelas,id', 'umur' => 'required|integer', 'absen' => 'required|integer', ]); - Siswa::create([ - 'nama' => $request->nama, - 'kelas' => $request->kelas, - 'umur' => $request->umur, - 'absen' => $request->absen, - ]); + Siswa::create($request->all()); return redirect()->route('siswa.index')->with('success', 'Data berhasil ditambahkan!'); } public function edit($id) { - $siswa = Siswa::find($id); + $siswa = Siswa::findOrFail($id); + $kelases = Kelas::all(); // <-- Ambil semua kelas dari tabel kelas - if (!$siswa) { - return view('siswa.notfound', ['id' => $id]); - } - - return view('siswa.edit', compact('siswa', 'id')); + return view('siswa.edit', compact('siswa', 'kelases')); } + public function update(Request $request, $id) { $request->validate([ 'nama' => 'required|string|max:255', - 'kelas' => 'required|string|max:50', + 'kelas_id' => 'required|exists:kelas,id', 'umur' => 'required|integer', 'absen' => 'required|integer', ]); - $siswa = Siswa::find($id); - - if (!$siswa) { - return view('siswa.notfound', ['id' => $id]); - } - - $siswa->update([ - 'nama' => $request->nama, - 'kelas' => $request->kelas, - 'umur' => $request->umur, - 'absen' => $request->absen, - ]); + $siswa = Siswa::findOrFail($id); + $siswa->update($request->all()); return redirect()->route('siswa.index')->with('success', 'Data siswa berhasil diupdate!'); } - public function show($id) - { - $siswa = Siswa::find($id); - - if (!$siswa) { - return view('siswa.notfound', ['id' => $id]); - } - - return view('siswa.detail', compact('siswa')); - } - public function destroy($id) { - $siswa = Siswa::find($id); + $siswa = Siswa::findOrFail($id); + $siswa->delete(); - if ($siswa) { - $siswa->delete(); - return redirect()->route('siswa.index')->with('success', 'Data berhasil dihapus.'); - } - - return redirect()->route('siswa.index')->with('error', 'Data tidak ditemukan.'); + return redirect()->route('siswa.index')->with('success', 'Data berhasil dihapus.'); } -} +} \ No newline at end of file diff --git a/app/Models/Kelas.php b/app/Models/Kelas.php new file mode 100644 index 0000000..fcb600f --- /dev/null +++ b/app/Models/Kelas.php @@ -0,0 +1,19 @@ +hasMany(Siswa::class, 'kelas_id', 'id'); + } +} diff --git a/app/Models/Siswa.php b/app/Models/Siswa.php index c057f55..b065819 100644 --- a/app/Models/Siswa.php +++ b/app/Models/Siswa.php @@ -2,13 +2,17 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Siswa extends Model { - protected $table = 'siswa'; + use HasFactory; - protected $fillable = [ - 'nama', 'kelas', 'umur', 'absen' - ]; + protected $fillable = ['nama', 'kelas_id', 'umur', 'absen']; + + public function kelas() + { + return $this->belongsTo(Kelas::class, 'kelas_id', 'id'); + } } diff --git a/database/migrations/2025_07_22_093135_create_siswa_table.php b/database/migrations/2025_07_22_093135_create_siswa_table.php deleted file mode 100644 index 3ca37c7..0000000 --- a/database/migrations/2025_07_22_093135_create_siswa_table.php +++ /dev/null @@ -1,31 +0,0 @@ -id(); - $table->string('nama'); - $table->string('kelas'); - $table->integer('umur'); - $table->integer('absen'); - $table->timestamps(); - }); - } - - /** - * Reverse the migrations. - */ - public function down(): void - { - Schema::dropIfExists('siswa'); - } -}; diff --git a/database/migrations/2025_07_24_025000_create_kelas_table.php b/database/migrations/2025_07_24_025000_create_kelas_table.php new file mode 100644 index 0000000..8146a77 --- /dev/null +++ b/database/migrations/2025_07_24_025000_create_kelas_table.php @@ -0,0 +1,19 @@ +id(); + $table->string('nama'); + $table->timestamps(); + }); + } + + public function down(): void { + Schema::dropIfExists('kelas'); + } +}; diff --git a/database/migrations/2025_07_24_025545_create_siswas_table.php b/database/migrations/2025_07_24_025545_create_siswas_table.php new file mode 100644 index 0000000..5d9de4d --- /dev/null +++ b/database/migrations/2025_07_24_025545_create_siswas_table.php @@ -0,0 +1,22 @@ +id(); + $table->string('nama'); + $table->foreignId('kelas_id')->constrained('kelas')->onDelete('cascade'); + $table->integer('umur'); + $table->integer('absen'); + $table->timestamps(); + }); + } + + public function down(): void { + Schema::dropIfExists('siswas'); + } +}; diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 4cf5185..9447dac 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -15,8 +15,5 @@ class DatabaseSeeder extends Seeder { // User::factory(10)->create(); - $this->call([ - SiswaSeeder::class, - ]); } } diff --git a/database/seeders/KelasSeeder.php b/database/seeders/KelasSeeder.php new file mode 100644 index 0000000..98b5e4c --- /dev/null +++ b/database/seeders/KelasSeeder.php @@ -0,0 +1,29 @@ + $kelas]); + } + } +} diff --git a/database/seeders/SiswaSeeder.php b/database/seeders/SiswaSeeder.php index 05a4823..aa7c179 100644 --- a/database/seeders/SiswaSeeder.php +++ b/database/seeders/SiswaSeeder.php @@ -4,7 +4,6 @@ namespace Database\Seeders; use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; -use App\Models\Siswa; class SiswaSeeder extends Seeder { @@ -13,18 +12,21 @@ class SiswaSeeder extends Seeder */ public function run(): void { - Siswa::create([ - 'nama' => 'syifa', - 'kelas' => 'XIII', + $XIII = Kelas::where('kelas', 'XIII')->first(); + $XII = Kelas::where('kelas', 'XII')->first(); + + // Cek apakah kelas tersedia + if (!$XIII || !$XII) { + throw new \Exception("Kelas belum tersedia. Pastikan KelasSeeder sudah jalan."); + } + + DB::table('siswas')->insert([ + 'nama' => 'Syifa', + 'kelas_id' => 2, //ini nama kolom baru 'umur' => 19, 'absen' => 34, - ]); - - Siswa::create([ - 'nama' => 'syifa maulidya', - 'kelas' => 'XIII SIJA A', - 'umur' => 18, - 'absen' => 35, + 'created_at' => now(), + 'updated_at' => now(), ]); } -} +} \ No newline at end of file diff --git a/resources/views/siswa/create.blade.php b/resources/views/siswa/create.blade.php index 38ee1c9..e7d1e25 100644 --- a/resources/views/siswa/create.blade.php +++ b/resources/views/siswa/create.blade.php @@ -37,7 +37,7 @@ margin-bottom: 8px; color: #34495e; } - input { + input, select { width: 100%; padding: 12px; margin-bottom: 20px; @@ -46,7 +46,7 @@ font-size: 16px; transition: all 0.3s ease; } - input:focus { + input:focus, select:focus { outline: none; border: 1px solid #3498db; box-shadow: 0 0 8px rgba(52,152,219,0.5); @@ -89,13 +89,22 @@ @endif + @php + use App\Models\Kelas; + @endphp +
@csrf - + @@ -110,4 +119,4 @@ - \ No newline at end of file + diff --git a/resources/views/siswa/edit.blade.php b/resources/views/siswa/edit.blade.php index 0207cd2..1fc89bc 100644 --- a/resources/views/siswa/edit.blade.php +++ b/resources/views/siswa/edit.blade.php @@ -37,7 +37,7 @@ margin-bottom: 8px; color: #34495e; } - input { + input, select { width: 100%; padding: 12px; margin-bottom: 20px; @@ -46,7 +46,7 @@ font-size: 16px; transition: all 0.3s ease; } - input:focus { + input:focus, select:focus { outline: none; border: 1px solid #3498db; box-shadow: 0 0 8px rgba(52,152,219,0.5); @@ -66,6 +66,14 @@ .button:hover { background: #2980b9; } + .alert { + background: #f8d7da; + color: #721c24; + padding: 15px; + border-radius: 10px; + margin-bottom: 20px; + border-left: 5px solid #f5c6cb; + } @@ -81,15 +89,26 @@ @endif - + @php + use App\Models\Kelas; + @endphp + + @csrf @method('PUT') - - + + - - + + @@ -104,4 +123,4 @@ - \ No newline at end of file + diff --git a/resources/views/siswa/index.blade.php b/resources/views/siswa/index.blade.php index 0dba718..91a1735 100644 --- a/resources/views/siswa/index.blade.php +++ b/resources/views/siswa/index.blade.php @@ -112,7 +112,7 @@ {{ $loop->iteration }} {{ $siswa->nama }} - {{ $siswa->kelas }} + {{ $siswa->kelas->nama ?? '-' }} {{ $siswa->umur }} {{ $siswa->absen }}