Pada tutorial ini kita akan belajar tentang cara membuat CRUD pada laravel menggunakan database MySQL. CRUD merupakan singkatan dari Create, Read, Update dan Delete. Yang mana Create berarti proses penginputan data ke database, Read merupakan proses menampilkan data dari database, Update merupakan proses mengubah data pada database dan Delete merupakan proses penghapusan data dari database.
Untuk mengolah data dengan database pada laravel ada 2 cara yang umum digunakan, yaitu dengan menggunakan Query Builder dan Eloquent. Keduanya merupakan fitur yang sudah disediakan pada laravel, sehingga kita bisa lebih mudah dalam membuat CRUD pada laravel.
Membuat CRUD Pada Laravel Dengan Query Builder
Query Builder bisa kita anggap sebagai fitur untuk menjalankan query database, jadi di sini laravel telah membuat fungsi-fungsi untuk menjalankan query database, misalnya untuk memilih mau menampilkan data pada table apa, kita bisa langsung saja menggunakan fungsi table() pada laravel.
Begitu juga jika kita ingin menampilkan data yang lebih spesifik, misalnya kita ingin menampilkan data yang memiliki kriteria tertentu, seperti menampilkan data yang id-nya 5. Maka kita tinggal menggunakan fungsi where( ‘id’ , ‘5’ ) setelah memilih nama tabelnya, jadi penulisan query database jadi lebih singkat dan efisien.
Tidak hanya bisa memilih table dan menggunakan fungsi where() ada juga fungsi lainnya seperti penggunaan JOIN, DISTINCT dan lain-lain.
Pengaturan Database Pada Laravel
Contoh CRUD yang akan kita buat di sini adalah CRUD untuk data siswa, jadi disini kita akan membuat fungsi sebagai berikut :
- Menampilkan data dari database dengan laravel
- Menginput data ke database dengan laravel
- Mengupdate atau mengubah data pada database dengan laravel
- Menghapus data dari database dengan laravel
Pada project kali ini saya membuatnya dengan nama crudlaravel, untuk cara membuat projectnya bisa dibaca pada tutorial
Karena kita akan berurusan dengan database maka sekarang kita akan melakukan konfigurasi database dulu di laravel. Untuk mengatur database pada laravel kita bisa mengaturnya pada file .env yang terletak di direktori paling luar (crudlaravel/config/database.php).
Ubah beberapa parameter yang ada pada file .env seperti pada gambar berikut ini :
Pada file .env seperti pada gambar di atas, nama database diisi dengan nama data yang akan digunakan dan parameter lainnya seperti pada gambar di atas.
DB_CONNECTION=mysql DB_HOST=localhost DB_PORT=3306 DB_DATABASE=datasiswa DB_USERNAME=root DB_PASSWORD=
Mempersiapkan Database dan Tabel Siswa
Selanjutnya kita buat database dengan nama yang sesuai dengan nama database yang sudah kita tulis pada file .env , pada contoh ini saya membuat database dengan nama “datasiswa“.
Pada database tersebut buat table dengan nama “tbl_siswa”, di sini kita membuat table siswa dengan 5 column, yaitu nis, nama, kelas, alamat dan hp.
id | int ( auto increment ) |
nis | varchar ( 20 ) |
nama | varchar ( 50 ) |
kelas | varchar (10 ) |
alamat | varchar ( 50 ) |
hp | varchar ( 20 ) |
Menampilkan Data Dari Database Dengan Laravel
Untuk menampilkan data dari database dengan laravel, pastikan kita sudah memiliki beberapa data di dalam tabel tbl_siswa.
Setelah kita memiliki beberapa data untuk ditampilkan, sekarang kita mulai dengan membuat route untuk menampilkan data siswa. Buat route baru dengan alamat ‘/siswa’.
crudlaravel/routes/web.php
Route::get('/siswa','SiswaController@index');
disini kita memerintahkan untuk menjalankan method index() pada controller SiswaControlle pada saat route ‘/siswa‘ di akses.
Selanjutnya buat controller SiswaController.php, karena kita belum mempunyai controller dengan nama SiswaController.php ,kita buat dulu controller tersebut dengan menggunakan sintak pada artisan seperti berikut :
php artisan make:controller SiswaController
Karena sebelumnya pada route ‘/siswa’ kita memerintahkan untuk menjalankan method index(), maka pada SiswaController.php ini kita akan membuat method index().
Dan karena kita akan menggunakan query builder laravel, maka kita wajib menambahkan perintah berikut pada bagian paling atas.
use Illuminate\Support\Facades\DB;
Sehingga keseluruhan isi dari controller SiswaController.php akan menjadi seperti berikut :
crudlaravel/app/Http/Controllers/SiswaController.php
<?php namespace App\Http\Controllers; use Illuminate\Http\Request; use Illuminate\Support\Facades\DB; class SiswaController extends Controller { public function index() { // mengambil data dari table tbl_siswa $siswa = DB::table('tbl_siswa')->get(); // mengirim data siswa ke view index return view('index',['datasiswa' => $siswa]); } }
Perhatikan pada fungsi index yang kita buat dalam controller SiswaController.php di atas, di sana kita mengambil data dari table ‘tbl_siswa’ hanya dengan perintah yang sangat pendek, yaitu :
// mengambil data dari table tbl_siswa $siswa = DB::table('tbl_siswa')->get();
Dengan fungsi table() kita menentukan nama table yang ingin dipilih, fungsi get() berguna untuk mengambil data dari table yang di pilih.
Sehingga data yang diambil akan disimpan dalam variabel $siswa, jadi intinya fungsi di atas itu seperti kita menampilkan data dari database dengan query mysql biasa seperti ” SELECT * FROM tbl_siswa“.
Selanjut nya kita passing atau kita kirim datanya ke view agar ditampilkan.
// mengirim data siswa ke view index return view('index',['datasiswa' => $siswa]);
Selanjutnya kita buat dulu view-nya dengan nama index.blade.php.
crudlaravel/resources/views/index.blade.php
<!DOCTYPE html> <html> <head> <title>Tutorial Membuat CRUD Pada Laravel 8</title> </head> <body> <h2>www.agussuratna.net</h2> <h3>Data Siswa</h3> <a href="/siswa/tambah"> + Tambah Siswa Baru +</a> <br/> <br/> <table border="1"> <tr> <th>NIS</th> <th>Nama</th> <th>Kelas</th> <th>Alamat</th> <th>HP</th> <th>Aksi</th> </tr> @foreach($datasiswa as $s) <tr> <td>{{ $s->nis }}</td> <td>{{ $s->nama }}</td> <td>{{ $s->kelas }}</td> <td>{{ $s->alamat }}</td> <td>{{ $s->hp }}</td> <td> <a href="/siswa/edit/{{ $s->id }}">Edit</a> | <a href="/siswa/hapus/{{ $s->id }}">Hapus</a> </td> </tr> @endforeach </table> </body> </html>
Perhatikan pada view index.blade.php di atas. sebelumnya, pada controller data yang kita ambil dari table tbl_siswa kita simpan dalam variabel $siswa, kemudian kita passing ke view. Pada view tinggal langsung kita tampilkan dalam perulangan foreach().
@foreach($datasiswa as $p) <tr> <td>{{ $s->nis }}</td> <td>{{ $s->nama }}</td> <td>{{ $s->kelas }}</td> <td>{{ $s->alamat }}</td> <td>{{ $s->hp }}</td> <td> <a href="/siswa/edit/{{ $s->id }}">Edit</a> | <a href="/siswa/hapus/{{ $s->id }}">Hapus</a> </td> </tr> @endforeach
Selanjutnya kita coba akses route ‘/siswa’ , maka hasilnya akan seperti berikut ini :
Menginput Data Ke Database Dengan Laravel
Untuk menginput data ke database dengan laravel, caranya tidak jauh berbeda dengan cara menginput data ke database dengan php.
Pertama kita tambah dulu route dengan nama ‘/siswa/tambah’.
crudlaravel/routes/web.php
Route::get('/siswa/tambah','SiswaController@tambah');
Disini kita membuat pengaturan route, jika diakses route ‘siswa/tambah‘ , maka akan kita perintahkan untuk menjalankan method tambah yang ada dalam controller SiswaController.
Sekarang kita buat dulu method tambahnya dalam controller SiswaController.
crudlaravel/app/Http/Controllers/SiswaController.php
// method untuk menampilkan view form tambah siswa public function tambah() { // memanggil view tambah return view('tambah'); }
Coba perhatikan pada method tambah yang kita buat seperti di atas. pada method ini kita memerintahkan untuk menampilkan view tambah.
Di sini rencananya kita akan membuat form penginputan data siswa pada view tambah ini, karena kita belum punya view tambah sekarang kita buat view baru dengan nama tambah.blade.php dalam folder views.
crudlaravel/resources/views/tambah.blade.php
<!DOCTYPE html> <html> <head> <title>Tutorial CRUD Pada Laravel</title> </head> <body> <h2> <a href="https://www.agussuratna.net">www.agussuratna.net</a> </h2> <h3>Data Siswa</h3> <a href="/siswa"> Kembali</a> <br/> <br/> <form action="/siswa/store" method="post"> {{ csrf_field() }} NIS <input type="text" name="nis" required="required"> <br /> Nama <input type="text" name="nama" required="required"> <br /> Kelas <input type="text" name="kelas" required="required"> <br /> Alamat <textarea name="alamat" required="required"></textarea> <br /> HP <input type="number" name="hp" required="required"> <br /> <input type="submit" value="Simpan Data"> </form> </body> </html>
Pehatikan pada view tambah.blade.php yang kita buat di atas, untuk action formnya kita buat diarahkan ke route ‘/siswa/store‘ karena kita ingin nanti route ‘siswa/store‘ yang akan menangani pemprosesan data yang diinput agar bisa diolah oleh controller.
Di dalam form kita telah membuat beberapa buah form inputan, yaitu ada NIS, Nama, Kelas, Alamat dan HP, sesuai dengan format table tbl_siswa yang sudah kita buat sebelumnya.
Disini kita juga menggunakan salah satu fitur dari laravel yaitu csrf protection , csrf projection merupakan semacam fitur keamanan untuk pencegahan penginputan data dari luar aplikasi atau sistem kita.
Inilah kelebihan laravel karena sudah menginclude fitur ini secara otomatis, hanya dengan menambahkan perintah {{csrf_field()}} seperti di atas, maka laravel akan otomatis men-generate kode token otomatis, yang di buat dalam bentuk form hidden.
Untuk membuktikannya, sekarang kita coba akses form tambah siswa dengan alamat localhost:8000/siswa/tambah , sesuai dengan yang kita atur di route sebelumnya, kemudian klik kanan dan pilih inspect element. DI sana terlihat valuenya terisi dengan kode yang sudah digenerate secara otomatis.
Jika tombol Simpan Data diklik kita belum bisa memasukkan data ke database, karena kita belum punya aksi untuk mengolah data yang diinput agar diinsert ke database.
Karena pada form tambah siswa actionnya kita buat ‘/siswa/store’, maka pada saat form disubmit, akan di arahkan ke route ‘/siswa/store’ untuk di proses.
Sekarang kita tambahkan route baru, yaitu route ‘/siswa/store’ yang ada dalam file crudlaravel/routes/web.php
Route::post('/siswa/store','SiswaController@store');
Pada route ini kita menggunakan method “post“, tidak lagi menggunakan method “get” seperti pada route sebelumnya yang kita buat.
Karena kita mengirimkan data melalui form ke route ‘/siswai/store’ , makanya kita wajib menggunakan method post pada routenya.
Route ini kita perintahkan untuk menjalankan method store dalam controller SiswaController, maka sekarang kita tambahkan lagi sebuah method baru dalam controller SiswaController.php, yaitu method store.
crudlaravel/app/Http/Controllers/SiswaController.php
// method untuk insert data ke table tbl_siswa public function store(Request $request) { // insert data ke table tbl_siswa DB::table('tbl_siswa')->insert([ 'nis' => $request->nis, 'nama' => $request->nama, 'kelas' => $request->kelas, 'alamat' => $request->alamat, 'hp' => $request->hp] ); // alihkan halaman ke halaman siswa return redirect('/siswa'); }
Perhatikan pada method store di atas, disini kita menangkap data yang dikirimkan dari form tambah siswa. Cara menangkap datanya di dalam parameter fungsi store(), kita beri keterangan Request, di ikuti dengan nama variabel yang ingin kita jadikan sebagai penyimpan data yang dikirim dari form, di sini kita menyimpannya dalam variabel $request.
public function store(Request $request)
Kemudian tinggal kita insert datanya ke table tbl_siswa dengan menggunakan query builder laravel untuk insert data.
// insert data ke table tbl_siswa DB::table('tbl_siswa')->insert([ 'nis' => $request->nis, 'nama' => $request->nama, 'kelas' => $request->kelas, 'alamat' => $request->alamat, 'hp' => $request->hp ]);
Fungsi table() untuk memberitahukan nama table, fungsi insert() bertujuan untuk menginsert data dan menetapkan data apa saja yang ingin diinsert.
Jadi query builder di atas sama saja artinya seperti :
INSERT INTO tbl_siswa (nis','nama','kelas','alamat','hp') VALUES (nis','nama','kelas','alamat','hp');
Dan bagian yang paling terakhir setelah kita menginput data ke table tbl_siswa, maka kita perintahkan untuk mengalihkan halaman ke halaman siswa atau ke route ‘siswa’ kembali.
// alihkan halaman ke halaman siswa return redirect('/siswa');
Sekarang coba kita coba jalankan akses localhost:8000/siswa dan klik tambah siswa baru, maka akan di alihkan ke halaman tambah siswa. Coba isi beberapa data percobaan dan klik tombol simpan data, dan datapun berhasil tersimpan ke table tbl_siswa, dan tampil pada halaman data siswa.
Mengedit / Update Data pada Database Dengan Laravel
Pada tutorial ini kita akan belajar mengedit atau mengupdate data pada database dengan laravel. Inti keseluruhannya sama saja dengan cara mengedit data dari database dengan PHP native, hanya saja untuk membuat edit data dari database dengan laravel ini kita mengikuti struktur dan perintah-perintah yang ada pada laravel. Kita bisa membaca dokumentasi query builder laravel di https://laravel.com/docs/5.7/queries#updates
Pada view yang menampilkan data siswa yang sudah kita buat sebelumnya, pada view index.blade.php di sana kita telah membuat tombol atau link edit seperti berikut.
<a href="/siswa/edit/{{ $s->id }}">Edit</a>
Pada tombol atau link edit tersebut kita memerintahkan untuk mengalihkan halaman ke route ‘/siswa/edit/‘ sambil mengirimkan id data yang ingin di edit.
Untuk pengiriman data melalui url seperti kasus ini sudah kita pelajari pada tutorial sebelumnya, yaitu pada tutorial request data pada laravel.
Karena pada saat tombol edit diklik, maka akan di arahkan ke route ‘/siswa/edit/id_data_nya’.
maka sekarang kita buat route baru seperti berikut, agar id data yang dikirimkan sekalian kita kirim juga ke controller untuk kita ambil data siswa yang ber id tersebut.
crudlaravel/routes/web.php
Route::get('/siswa/edit/{id}','SiswaController@edit');
pada route ini id data yang dikirimkan pada url kita istilahkan dengan {id} dan kita perintahkan untuk menjalankan method edit pada controller SiswaController.php dan id datanya akan kita tangkap dari controller. Buat method editnya dalam controller SiswaController.php.
crudlaravel/app/Http/Controllers/SiswaController.php
// method untuk edit data siswa public function edit($id) { // mengambil data siswa berdasarkan id yang dipilih $siswa = DB::table('tbl_siswa')->where('id',$id)->get(); // passing data siswa yang didapat ke view edit.blade.php return view('edit',['datasiswa' => $siswa]); }
Id data yang dikirimkan dari route tadi kita tangkap dalam parameter method edit ( edit($id) ). Selanjutnya kita ambil data siswa dari database dengan menggunakan query builder berikut.
// mengambil data siswa berdasarkan id yang dipilih $siswa = DB::table('tbl_siswa')->where('id',$id)->get();
Sekalian kita seleksi id data yang ingin diambil dengan menyeleksi id siswanya,
where('id',$id)->get()
Kemudian kita passing datanya ke view edit.blade.php.
return view('edit',['datasiswa' => $siswa]);
Sekarang kita buat view baru dengan nama edit.blade.php , karena kita akan menampilkan data siswa yang ingin di edit tadi di dalam form edit.
crudlaravel/resources/views/edit.blade.php
<!DOCTYPE html> <html> <head> <title>Tutorial CRUD Pada Laravel</title> </head> <body> <h2><a href="https://www.agussuratna.net">www.agussuratna.net</a></h2> <h3>Edit Siswa</h3> <a href="/siswa"> Kembali</a> <br/> <br/> @foreach($datasiswa as $s) <form action="/siswa/update" method="post"> {{ csrf_field() }} <input type="hidden" name="id" value="{{ $s->id }}"> <br/> NIS <input type="text" required="required" name="nis" value="{{ $s->nis }}"> <br/> Nama <input type="text" required="required" name="nama" value="{{ $s->nama }}"> <br/> Kelas <input type="text" required="required" name="kelas" value="{{ $s->kelas }}"> <br/> Alamat <textarea required="required" name="alamat">{{ $s->alamat }}</textarea> <br/> HP <input type="number" required="required" name="hp" value="{{ $s->hp }}"> <br/> <input type="submit" value="Simpan Data"> </form> @endforeach </body> </html>
Perhatikan view edit di atas, kita menampilkan data siswa yang ingin diedit ke dalam form edit menggunakan perulangan foreach.
Karena menggunakan laravel jangan lupa untuk menyertakan fungsi csrf protection {{ csrf_field() }} yang sudah dijelaskan juga sebelumnya tentang kegunaannya.
Pada form edit ini kita menetapkan actionnya ke route ‘/siswa/update‘ dengan menggunakan method post. Oleh karena itu kita tambahkan route ‘/siswa/update‘ dulu untuk meng-handle data dari form edit siswa ini.
crudlaravel/routes/web.php
Route::post('/siswa/update','SiswaController@update');
Pada route update ini kita tidak menggunakan method get, tapi menggunakan method post, seperti pada saat kita belajar membuat input data ke database dengan laravel, pada route ini kita perintahkan untuk menjalankan method update dalam controller SiswaController.php.
Sekarang buat lagi sebuah method updatenya.
crudlaravel/app/Http/Controllers/SiswaController.php
// update data siswa public function update(Request $request) { // update data siswa DB::table('tbl_siswa')->where('id',$request->id)->update([ 'nis' => $request->nis, 'nama' => $request->nama, 'kelas' => $request->kelas, 'alamat' => $request->alamat, 'hp' => $request->hp ]); // alihkan halaman ke halaman siswa return redirect('/siswa'); }
Seperti pada saat membuat proses penginputan data ke database, data yang dikirim dari form kita tangkap dengan mendeklarasikan Request dalam parameter method update ini, dan data-data yang dikirim dari form edit akan tersimpan didalam variabel $request, untuk penamaan variabel nya bebas, tinggal sesuaikan saja.
Untuk update datanya kita menggunakan query builder seperti berikut :
// update data siswa DB::table('tbl_siswa')->where('id',$request->id)->update([ 'nis' => $request->nis, 'nama' => $request->nama, 'kelas' => $request->kelas, 'alamat' => $request->alamat, 'hp' => $request->hp ]);
dan terakhir kita alihkan kembali halamannya ke route ‘/siswa‘ yang menampilkan semua data siswa.
// alihkan halaman ke halaman siswa return redirect('/siswa');
Sekarang kita coba jalankan localhost:8000/siswa dan klik edit pada data yang ingin diubah atau diupdate, ubah datanya, kemudian klik Simpan Data, dan datanya berhasil di update.
Menghapus / Delete Data pada Database Dengan Laravel
Perhatikan pada view index.blade.php yang sudah kita buat sebelumnya, pada masing-masing row data siswa sudah kita buatkan link atau tombol hapus nya.
<a href="/siswa/hapus/{{ $s->id }}">Hapus</a>
Pada saat tombol hapus ini di klik, maka akan kita arahkan ke route ‘/siswa/hapus’. sambil mengirimkan id data siswa yang ingin dihapus. Sehingga link routenya akan menjadi seperti ‘/siswa/hapus/ID_nya‘.
Selanjutnya kita buat route ‘/siswa/hapus’ nya untuk menangani pengiriman id data ini, buka file web.php seperti biasa dan tambahkan route berikut.
crudlaravel/routes/web.php
Route::get('/siswa/hapus/{id}','SiswaController@hapus');
Sama seperti route edit sebelumnya, pada route hapus ini juga kita menangkap id data siswa. Jika sebelumnya pada route edit kita menangkap id data siswa dan mengirimkannya ke method edit, maka pada route hapus ini kita menangkap id data siswanya dan kita kirimkan ke method hapus.
Jadi sekarang kita buat method hapus dalam controller SiswaController.php untuk melakukan proses penghapusan data siswa berdasarkan id yang diterima menggunakan query builder laravel.
crudlaravel/app/Http/Controllers/SiswaiController.php
// method untuk hapus data siswa public function hapus($id) { // menghapus data siswa berdasarkan id yang dipilih DB::table('tbl_siswa')->where('id',$id)->delete(); // alihkan halaman ke halaman siswa return redirect('/siswa'); }
Perhatikan pada method hapus di atas, id datanya kita tangkap dalam parameter method hapus, sama seperti saat kita menangkap id data pada method edit. Kemudian kita buat query builder laravel untuk menghapus data dari tabel tbl_siswa.
// menghapus data siswa berdasarkan id yang dipilih DB::table('tbl_siswa')->where('id',$id)->delete();
Caranya masih sama, kita pilih nama tabelnya dalam fungsi table(), kemudian kita seleksi dengan fungsi where() untuk menentukan data mana yang ingin dihapus (sesuai dengan id data nya), dan terakhir kita gunakan fungsi delete() untuk menghapus data nya.
Setelah proses penghapusan data, kita perintahkan untuk mengalihkan halaman nya kembali ke route ‘/siswa’.
// alihkan halaman ke halaman siswa return redirect('/siswa');
Sekarang kita coba akses localhost:8000/siswa dan klik hapus pada salah satu data, data berhasil dihapus.
Sampai disini selesai sudah materi kita tentang membuat CRUD laravel menggunakan metode query builder. Pada tutotial selanjutnya nanti kita akan belajar tentang cara membuat CRUD dengan laravel menggunakan eloquent.
untuk penjelasan kali ini saya tidak mengerti karena kurang nya langkah2 mohon untuk di perbaiki lagi
Terima kasih masukannya. Untuk memahaminya silahkan pelajari materi sebelumnya.