Assalamualaikum, wr. wb. Sekarang Laravel sudah masuk versi 6 nih, gak terasa ya cepet banget. Oke tanpa basa-basi, mari kita belajar membuat projek sederhana dengan penerapan CRUD (Create, Read, Update, Delete) di Laravel 6 menggunakan ORM Eloquent. Oh ya buat kalian yang belum tahu apa itu ORM Eloquent silahkan lihat Disini. Kita dulu sebenarnya juga sudah belajar membuat CRUD ORM Eloquent dan Query Builder di Laravel 5.8.
Sebenarnya tidak jauh berbeda dengan versi yang sebelumnya. Berikut adalah beberapa fitur tambahan pada Laravel 6:
- Semantic versioning
- Compatibility with Laravel Vapor,
- Improved authorization responses,
- Job middleware,
- Lazy collections,
- Sub-query improvements,
- The extraction of frontend scaffolding to the laravel/ui Composer package
Lalu apa saja yang perlu disiapkan untuk menggunakan Laravel 6 ini? Pertama, pastikan PHP kalian sudah versi 7.2 ke atas, jika belum silahkan update dulu. Cara melihatnya, ketik "php -v" pada command-line kalian. Persiapkan XAMPP atau yang sejenisnya, karena disini kita akan menggunakan database MySQL. Dan tentunya code editor, disini kita menggunakan Visual Code. Berikut adalah tahap-tahap dalam tutorial kali ini:
- Install Laravel 6
- Konfigurasi Database
- Membuat Migrasi
- Membuat Resource Route
- Membuat Controller dan Model
- Membuat View
- Hasil Akhir
Jika peralatan kalian sudah siap, mari kita mulai belajarnya. Aplikasi yang akan kita buat kali ini adalah Sistem Informasi Manajemen Perpustakaan Sederhana. Jadi pada aplikasi ini kita dapat menambahkan data buku perpustakaan, sekaligus mengubah dan menghapusnya.
Langkah 1: Install Laravel 6
Untuk melakukan install masih sama dengan versi sebelumnya, sebenarnya ada dua cara jika kalian lihat di dokumentasinya Laravel 6. Kalau saya lebih suka menggunakan Composer Create-Project seperti berikut. Ketikkan pada command-line kalian.
composer create-project --prefer-dist laravel/laravel perpustakaan
Berikut adalah tampilan saat install Laravelnya. Pastikan kalian terkoneksi dengan internet ya.
Langkah 2: Konfigurasi Database
Sebelumnya buat dulu database yang akan kalian pakai sesuai dengan database 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=perpustakaan DB_USERNAME=root DB_PASSWORD=
Langkah 3: Membuat Migrasi
Karena tema kita tentang sistem manajemen perpustakaan, maka kita akan membuat tabel bernama "books". Ketikkan kode berikut pada command-line kalian.
php artisan make:migration create_books_table --create=books
Jika berhasil, kita akan mendapat file baru pada folder database/migrations dengan nama file "2020_01_12_063822_create_books_table". Sekarang kita buka file tersebut, dan modifikasi 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 | <?php use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreateBooksTable extends Migration { public function up() { Schema::create('books', function (Blueprint $table) { $table->bigIncrements('id'); $table->string('title'); $table->string('writer'); $table->string('publisher'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('books'); } } |
Jadi disini kita membuat tabel dengan nama "books" dan kolom bernama "title", "writer", dan "publisher" bertipe string. Disini saya sarankan kalian biasakan menulis nama kolom dengan bahasa inggris, agar nanti terbiasa jika di dunia kerja. Dan satu lagi, di laravel akan otomatis membuatkan kolom "created_at" dan "updated_at" dengan fungsi timestamps() jadi tidak usah dihapus ya, karena ini biasanya bawaan saat pertama membuat file migrasi.
Untuk melihat tipe data yang dapat kita gunakan untuk membuat kolom, silahkan cek fungs-fungsi yang sudah disediakan Laravel Disini. Selanjutnya kita eksekusi file migrasi yang telah kita buat tadi dengan perintah beikut.
Langkah 4: Membuat Resource 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.
Oke sekarang tambahkan kode berikut pada routes/web.php
<?php Route::resource('books', 'BooksController');
Sekarang silahkan cek dengan menggunakan perintah berikut.
php artisan route:list
Maka kalian akan memperoleh hasil seperti gambar berikut.
Dengan melihat tabel route list di atas kita bisa tahu bagaimana cara memanggil route-route tersebut pada Controller nanti.
NB: Kalian dapat menjalankan perintah route:list jika kalian sudah menjalankan langkah ke-5
Langkah 5: Membuat Controller dan Model
Karena Laravel merupakan framework yang menerapkan pola MVC, pasti kita membutuhkan Controller dan Model untuk membuat logic-nya. Nah di Laravel ini kalian dapat dengan mudah membuat file Controller dan Model secara bersamaan. Silahkan ketikkan kode berikut ini.
php artisan make:controller BooksController --resource --model=Book
Nah perhatikan perintah di atas, kita menambahkan --resource sehingga 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/BooksController.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 68 | <?php namespace App\Http\Controllers; use App\Book; use Illuminate\Http\Request; class BooksController extends Controller { public function index() { $books = Book::all(); //Fungsi untuk mengambil seluruh data pada tabel books return view('books.index', compact('books')); //Redirect ke halaman books/index.blade.php dengan membawa data books tadi } public function create() { return view('books.create'); //Redirect ke halaman books/create.blade.php } public function store(Request $request) { $request->validate([ 'title' => 'required', //nama form "title" harus diisi (required) 'writer' => 'required', //nama form "writer" harus diisi (required) 'publisher' => 'required', //nama form "publisher" harus diisi (required) ]); //Memvalidasi inputan yang kita kirim apakah sudah benar Book::create($request->all()); //Fungsi untuk menyimpan data inputan kita return redirect()->route('books.index') ->with('success', 'Book created successfully.'); //Redirect ke halaman books/index.blade.php dengan pesan success } public function show(Book $book) { return view('books.detail', compact('book')); //Redirect ke halaman books/detail.blade.php dengan membawa data book sesuai ID yang dipilih } public function edit(Book $book) { return view('books.edit', compact('book')); //Redirect ke halaman books/edit.blade.php dengan membawa data book sesuai ID yang dipilih } public function update(Request $request, Book $book) { $request->validate([ 'title' => 'required', //nama form "title" harus diisi (required) 'writer' => 'required', //nama form "writer" harus diisi (required) 'publisher' => 'required', //nama form "publisher" harus diisi (required) ]); //Memvalidasi inputan yang kita kirim apakah sudah benar $book->update($request->all()); //Fungsi untuk mengupdate data inputan kita return redirect()->route('books.index') ->with('success', 'Book updated successfully'); //Redirect ke halaman books/index.blade.php dengan pesan success } public function destroy(Book $book) { $book->delete(); //Fungsi untuk menghapus data sesuai dengan ID yang dipilih return redirect()->route('books.index') ->with('success', 'Book deleted successfully'); //Redirect ke halaman books/index.blade.php dengan pesan success } } |
Untuk penjelasan tiap kode silahkan baca di komen pada kode di atas ya. Jadi initinya setiap aksi yang berhasil kita lakukan, akan memberikan pesan success yang nantinya akan ditangkap oleh fungsi session pada view.
Kemudian pada app/Book.php silahkan tambahkan $fillable dimana untuk membuat kolom-kolom tersebut dapat diisi atau ditambahkan data.
<?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { protected $fillable = [ 'title', 'writer', 'publisher' ]; }
Langkah 6: Membuat View
Saya asumsikan kalian sudah mengerti cara templating pada laravel menggunakan blade. Pertama buat folder books pada resources/views. Terakhir buat file-file berikut ini.
- layout.blade.php
- index.blade.php
- create.blade.php
- edit.blade.php
- detail.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 | <!DOCTYPE html> <html> <head> <title>Sistem Informasi Manajemen Perpustakaan</title> <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> <script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></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 54 55 56 | @extends('books.layout') @section('content') <div class="row"> <div class="col-lg-12 margin-tb mt-3 mb-3"> <div class="text-left"> <h2>Kelola Data Buku</h2> </div> <div class="text-right"> <a class="btn btn-success" href="{{ route('books.create') }}">Tambah Buku</a> </div> </div> </div> @if ($message = Session::get('success')) <div class="alert alert-success alert-dismissible fade show" role="alert"> <strong><p>{{ $message }}</p></strong> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> @endif <table class="table table-striped table-bordered"> <tr> <th>No</th> <th>Judul</th> <th>Penulis</th> <th>Penerbit</th> <th width="280px">Action</th> </tr> @foreach ($books as $key => $book) <tr> <td>{{ $key+1 }}</td> <td>{{ $book->title }}</td> <td>{{ $book->writer }}</td> <td>{{ $book->publisher }}</td> <td> <form action="{{ route('books.destroy',$book->id) }}" method="POST"> <a class="btn btn-info" href="{{ route('books.show',$book->id) }}">Show</a> <a class="btn btn-primary" href="{{ route('books.edit',$book->id) }}">Edit</a> @csrf @method('DELETE') <button type="submit" class="btn btn-danger">Delete</button> </form> </td> </tr> @endforeach </table> @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 | @extends('books.layout') @section('content') <div class="container mt-5"> <div class="row justify-content-center align-items-center"> <div class="card" style="width: 24rem;"> <div class="card-header"> Tambah Buku </div> <div class="card-body"> @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 method="post" action="{{ route('books.store') }}" id="myForm"> @csrf <div class="form-group"> <label for="title">Judul</label> <input type="text" name="title" class="form-control" id="title" aria-describedby="title" placeholder="Masukkan Judul Buku"> </div> <div class="form-group"> <label for="writer">Penulis</label> <input type="text" name="writer" class="form-control" id="writer" aria-describedby="writer" placeholder="Masukkan Nama Penulis"> </div> <div class="form-group"> <label for="publisher">Penerbit</label> <input type="text" name="publisher" class="form-control" id="publisher" aria-describedby="publisher" placeholder="Masukkan Nama Penerbit"> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> </div> @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 | @extends('books.layout') @section('content') <div class="container mt-5"> <div class="row justify-content-center align-items-center"> <div class="card" style="width: 24rem;"> <div class="card-header"> Edit Buku </div> <div class="card-body"> @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 method="post" action="{{ route('books.update',$book->id) }}" id="myForm"> @csrf @method('PUT') <div class="form-group"> <label for="title">Judul</label> <input type="text" name="title" class="form-control" id="title" value="{{ $book->title }}" aria-describedby="title" placeholder="Masukkan Judul Buku"> </div> <div class="form-group"> <label for="writer">Penulis</label> <input type="text" name="writer" class="form-control" id="writer" value="{{ $book->writer }}" aria-describedby="writer" placeholder="Masukkan Nama Penulis"> </div> <div class="form-group"> <label for="publisher">Penerbit</label> <input type="text" name="publisher" class="form-control" id="publisher" value="{{ $book->publisher }}" aria-describedby="publisher" placeholder="Masukkan Nama Penerbit"> </div> <button type="submit" class="btn btn-primary">Submit</button> </form> </div> </div> </div> </div> @endsection |
detail.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 | @extends('books.layout') @section('content') <div class="container mt-5"> <div class="row justify-content-center align-items-center"> <div class="card" style="width: 24rem;"> <div class="card-header"> Detail Buku </div> <div class="card-body"> <ul class="list-group list-group-flush"> <li class="list-group-item"><b>Judul: </b>{{$book->title}}</li> <li class="list-group-item"><b>Penulis: </b>{{$book->writer}}</li> <li class="list-group-item"><b>Penerbut: </b>{{$book->publisher}}</li> </ul> </div> <a class="btn btn-success" href="{{ route('books.index') }}">Kembali</a> </div> </div> </div> @endsection |
Oke, projek perpustakaan kita sudah selesai, Oh ya buat kalian yang mungkin masih belum tahu cara menampilkan data pada view, kalian bisa lihat penjelasannya Disini sudah saya jelaskan secara detail.
Langkah 7: Hasil Akhir
Untuk menjalankan projek, ketikkan ini pada command-line.
php artisan serve
Akses dengan url localhost:8000/books maka kurang lebih hasilnya seperti berikut:
Tampilan index |
Tampilan form tambah Buku |
Tampilan berhasil tambah data |
Oke sekian tutorial kali ini, jika kalian ingin mengembangkannya sendiri, silahkan dioprek-oprek. Jika mau pull langsung, silahkan kunjungi Disini.
Semoga Bermanfaat, Mohon maaf jika ada kurang lebihnya, silahkan tanya di komentar jika ada yang masih bingung.
Tags:
Laravel
manteps bossque
BalasHapusBlog nya sangat membantu kak,,, dengan penjelasan yg jelas dan mudah dimengerti sangat bermanfaat bagi saya
BalasHapusTerima kasih kak
Nama: Yulinda Sari
Nim: 1922500197
Dan link web kampus saya
https://www.atmaluhur.ac.id/
Cara mengatasi Invalid argument supplied for foreach() (view:
BalasHapusBagaimana Kak..???
Cek penulisan variabel-nya, ada yang salah tuh sepertinya
HapusHai kak. Terimakasih kak artikel nya sangat membantu saya dan mudah di pahami. Semoga sukses kedepannya ya kak dan ditunggu artikel selanjutnya . Terimakasih kak. Perkenalkan saya Roki Abdul Jalil , NIM 19225000192, kelompok SI2K, link kampus https://www.atmaluhur.ac.id/
BalasHapusTerimakasih kak, postingannya sangat berguna sekali dan mudah untuk dipahami. Ditunggu ya kak postingan selanjutnya. Perkenalkan nama saya Sintia dan Nim saya 1922500186 dan link Web kampus saya https://www.atmaluhur.ac.id/
BalasHapusTerimakasih atas postingan yang Anda bagikan sangat berguna, membantu saya mengerjakan tugas kuliah saya. Terus berkarya ya semoga postingan yg lainnya juga dapat menginspirasi. Perkenalkan nama saya Shofi Rachmawati, NIM 1922500133, dan kunjungi juga web kampus saya :
BalasHapushttps://www.atmaluhur.ac.id
Selamat malam kak, Terima kasih telah memberikan ilmu yang bermanfaat untuk saya, materinya mudah di pahami, dan juga contoh-contoh yang kakak bagikan sangat membantu saya untuk di praktekkan kembali dalam mempelajari materi tentang Script untuk CRUD dari PHP ke mysql. , semoga sukses selalu, di beri kesehatan agar bisa memberikan ilmu yang bermanfaat di artikel selanjutnya, Perkenalkan
BalasHapusnama saya : Reza anggraini
Nim : 1922500196
jangan lupa kunjungi web kampus saya ya kak https://www.atmaluhur.ac.id/
Terima Kasih kak....
Terimah kasih artikelnya sangat membantu kami terutama mahasiswa yang sedang belajar tentang web saya mahasiswa dari stmik atmaluhur dengan nim 1922500120 Sri Dewayanti, ini situs kampus saya https://www.atmaluhur.ac.id
BalasHapusproses menghapus tidak sesuai apa yg klik ka dalam kodingan nya gmna yaa?
BalasHapusCek ID nya apa sudah benar yang dikirim
HapusSpesial thanks to admin!!!
BalasHapusvisit this link
BalasHapushttps://jatimtimes.com
https://malangtimes.com
https://jatimtimes.com/baca/237815/20210318/080800/all-england-2021-trending-gegara-seluruh-wakil-indonesia-dikeluarkan-ini-sebabnya