Assalamualaikum, Pada tutorial kali ini kita akan belajar cara membuat CRUD menggunakan Laravel versi 9. Tidak ada banyak perubahan dari versi sebelumnya dalam kasus pembuatan CRUD ini. Hanya saja yang perlu kita perhatikan, dalam menggunakan Laravel 9 ini kita harus sudah upgrade versi PHP kita minimal versi 8.
Berikut adalah tahap-tahap dalam tutorial kali ini:- Install Laravel 9
- Konfigurasi Database
- Membuat Migrasi
- Membuat Resource Controller dan Route
- Membuat View
- Hasil Akhir
Langkah 1: Install Laravel 9
Untuk menginstall laravel 9, seperti biasa kita ketikkan perintah berikut pada terminal kita dan tunggu hingga instalasi selesai.
composer create-project --prefer-dist laravel/laravel namaprojek
Langkah 2: Konfigurasi Database
Sebelumnya buat dulu database yang akan kalian pakai pada localhost kalian (Saya asumsikan kalian sudah bisa membuat database-nya). Disini saya menggunakan MySQL pada phpMyAdmin. Setelah selesai membuat database, buka dile .env kalian, lalu setting sesuai nama, username dan password database-yang kalian buat.
DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=laravel9 DB_USERNAME=root DB_PASSWORD=
Langkah 3: Membuat Migrasi
Untuk membuat Migrasi, ketikkan perintah berikut:
php artisan make:migration create_students_table --create=students
Jika berhasil, kita akan mendapat file baru pada folder database/migrations dengan nama "2022_02_17_082500_create_students_table.php". Sekarang kita buka file berikut, dan modifikasi file tersebut menjadi seperti berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; return new class extends Migration { public function up() { Schema::create('students', function (Blueprint $table) { $table->id(); //tambahkan kode berikut $table->string('name'); $table->string('kelas'); //tambahkan kode di atas $table->timestamps(); }); } public function down() { Schema::dropIfExists('students'); } }; |
Sekarang silahkan ketikkan perintah berikut:
php artisan make:migrate
Langkah 4: Membuat Resource Controller dan Route
Buat yang baru tahu route silahkan cek tutorial yang pernah saya buat Disini. Nah dengan resource route ini, kita sudah dapat route untuk membuat fungsi CRUD. Jadi tidak perlu repot-repot membuat masing-masing route untuk CRUD seperti post, get, delete, dan update.
Tapi sebelumnya kita buat controller untuk user dahulu, kita sudah punya model user, jadi cukup buat controllernya saja. Ketikkan perintah ini di controller.
php artisan make:controller StudentController --resource
Oke sekarang tambahkan kode berikut pada routes/web.php
1 2 3 4 5 6 7 8 9 10 11 | <?php use Illuminate\Support\Facades\Route; Route::get('/', function () { return view('welcome'); }); //tambahkan kode berikut Route::resource('students', StudentController::class); |
Pada file Controller yang kita dapat secara otomatis akan terdapat 7 fungsi berikut yang dapat kita gunakan untuk membuat operasi CRUD.
- index()
- create()
- store()
- show()
- edit()
- update()
- destroy()
Sekarang kita buka app/Http/Controllers/StudentController.php kemudian ketikkan kodenya seperti berikut ini.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | <?php namespace App\Http\Controllers; use App\Models\Student; use Illuminate\Http\Request; class StudentController extends Controller { public function index() { $students = Student::latest()->paginate(5); return view('students.index',compact('students')) ->with('i', (request()->input('page', 1) - 1) * 5); } public function create() { return view('students.create'); } public function store(Request $request) { $request->validate([ 'name' => 'required', 'kelas' => 'required', ]); Student::create($request->all()); return redirect()->route('students.index') ->with('success','Student created successfully.'); } public function show(Student $student) { return view('students.show',compact('student')); } public function edit(Student $student) { return view('students.edit',compact('student')); } public function update(Request $request, Student $student) { $request->validate([ 'name' => 'required', 'kelas' => 'required', ]); $student->update($request->all()); return redirect()->route('students.index') ->with('success','Student updated successfully'); } public function destroy(Student $student) { $student->delete(); return redirect()->route('students.index') ->with('success','Student deleted successfully'); } } |
Jangan lupa untuk setting nilai $fillable di Model Student berdasarkan data yang ingin dapat kita tambah atau edit, pada kasus ini name dan kelas.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Student extends Model { use HasFactory; //tambahkan kode berikut protected $fillable = [ 'name', 'kelas' ]; } |
Langkah 5: Membuat View
Saya asumsikan kalian sudah mengerti cara templating pada laravel menggunakan blade. Pertama buat folder students pada resources/views. Terakhir buat file-file berikut ini.
- layout.blade.php
- index.blade.php
- create.blade.php
- edit.blade.php
- show.blade.php
Kemudian ketikkan kode berikut pada masing-masing file.
layout.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | <!DOCTYPE html> <html> <head> <title>Laravel 9 CRUD School Application</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet"> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js"></script> </head> <body> <div class="container"> @yield('content') </div> </body> </html> |
index.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | @extends('students.layout') @section('content') <div class="row mt-5"> <div class="col-lg-12 margin-tb"> <div class="float-start"> <h2>Laravel 9 CRUD School Application</h2> </div> <div class="float-end"> <a class="btn btn-success" href="{{ route('students.create') }}"> Create New student</a> </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success"> <p>{{ $message }}</p> </div> @endif <table class="table table-bordered"> <tr> <th>No</th> <th>Name</th> <th>Kelas</th> <th width="280px">Action</th> </tr> @foreach ($students as $student) <tr> <td>{{ ++$i }}</td> <td>{{ $student->name }}</td> <td>{{ $student->kelas }}</td> <td> <form action="{{ route('students.destroy',$student->id) }}" method="POST"> <a class="btn btn-info" href="{{ route('students.show',$student->id) }}">Show</a> <a class="btn btn-primary" href="{{ route('students.edit',$student->id) }}">Edit</a> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Delete</button> </form> </td> </tr> @endforeach </table> <div class="row text-center"> {!! $students->links() !!} </div> @endsection |
create.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | @extends('students.layout') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div> <h2>Add New Student</h2> </div> <div> <a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a> </div> </div> </div> @if ($errors->any()) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="{{ route('students.store') }}" method="POST"> @csrf <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> <input type="text" name="name" class="form-control" placeholder="Name"> </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Kelas:</strong> <input class="form-control" name="kelas" placeholder="Kelas"></input> </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center mt-3"> <button type="submit" class="btn btn-success">Submit</button> </div> </div> </form> @endsection |
edit.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 | @extends('students.layout') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div> <h2>Edit student</h2> </div> <div> <a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a> </div> </div> </div> @if ($errors->any()) <div class="alert alert-danger"> <strong>Whoops!</strong> There were some problems with your input.<br><br> <ul> @foreach ($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif <form action="{{ route('students.update',$student->id) }}" method="POST"> @csrf @method('PUT') <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> <input type="text" name="name" value="{{ $student->name }}" class="form-control" placeholder="Name"> </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Kelas:</strong> <input class="form-control" name="kelas" placeholder="Kelas" value="{{ $student->kelas }}"> </div> </div> <div class="col-xs-12 col-sm-12 col-md-12 text-center mt-3"> <button type="submit" class="btn btn-success">Submit</button> </div> </div> </form> @endsection |
show.blade.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | @extends('students.layout') @section('content') <div class="row"> <div class="col-lg-12 margin-tb"> <div> <h2> Show student</h2> </div> <div> <a class="btn btn-primary" href="{{ route('students.index') }}"> Back</a> </div> </div> </div> <div class="row"> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Name:</strong> {{ $student->name }} </div> </div> <div class="col-xs-12 col-sm-12 col-md-12"> <div class="form-group"> <strong>Kelas:</strong> {{ $student->kelas }} </div> </div> </div> @endsection |
Langkah 6: Hasil Akhir
Untuk menjalankan projek, ketikkan ini pada command-line.
php artisan serve
Akses dengan url localhost:8000/students maka kurang lebih hasilnya seperti berikut:
Untuk kalian yang ingin DOWNLOAD FULL KODE CRUD LARAVEL 9, SILAHKAN DIKLIK.
Untuk kalian yang ingin melihat perbandingan CRUD Versi 8 atau versi 6 atau versi 5, silahkan Klik link berikut:
Sekian semoga bermanfaat, Wassalamualaikum, wr. wb
Tadi saya komen cuma pakai name doang terkirim tapi gak tampil. Jadinya saya coba komen ulang.
BalasHapusUntuk CRUD yg pakai slug ada kak?
terimakasih infonyaaa sangat bermanfaat dan bisa dilakukan
BalasHapusHadehh ga jelas, udah dijalanin banyak errornya. sampe gw joki anjir ketemen. hadeh
BalasHapusYa ampun, udah ku ikutin code diatas, tapi kok salah terus
BalasHapusada yang tau, kok $students not defined?
BalasHapusbuat modelnya jalankan perintah berikut di terminal
Hapusphp artisan make:model Student
Tutorial d atas belum ada ini