Tutorial Laravel – Membuat CRUD Menggunakan Laravel & MySQL

Dipublikasikan oleh El Cicko pada

tutorial dasar crud laravel

Pada seri belajar Laravel atau tutorial Laravel yang akan kita bahas kali ini adalah bagaimana cara membuat CRUD dengan menggunakan Framework Laravel dan database MySQL. Untuk membuat aplikasi web dengan Laravel kamu wajib faham dulu bagaimana cara membuat CRUD Laravel agar memudahkan kamu dalam membuat website dengan Laravel.

Saya asumsikan kamu sudah faham bagaimana cara membuat project Laravel baru dengan menggunakan Laravel versi 4.2. Kalau belum, kamu bisa lihat artikel lama saya soal cara mudah melakukan instalasi Laravel. Walaupun tutorial tersebut untuk framework Laravel versi 5, kamu bisa menggunakan metode nomor 2.

Daftar isi dari tutorial Laravel ini adalah sebagai berikut :

  1. Konfigurasi Laravel
  2. Membuat Routing
  3. Membuat Model
  4. Membuat Controller
  5. Membuat Layout Template Dengan Blade

1. Konfigurasi Laravel

Pada kasus kali ini, kita akan beri nama project kita dengan nama “laracrud”, buka file config/app.php lalu ubah pada bagian Application Debugging Mode dan Application URL seperti berikut :

/*
|--------------------------------------------------------------------------
| Application Debug Mode
|--------------------------------------------------------------------------
|
| When your application is in debug mode, detailed error messages with
| stack traces will be shown on every error that occurs within your
| application. If disabled, a simple generic error page is shown.
|
*/
'debug' => true,

/*
|--------------------------------------------------------------------------
| Application URL
|--------------------------------------------------------------------------
|
| This URL is used by the console to properly generate URLs when using
| the Artisan command line tool. You should set this to the root of
| your application so that it is used when running Artisan tasks.
|
*/
'url' => 'http://localhost/laracrud/public/',

2. Membuat Routing

Setelah itu kita akan membuat Route pada Laravel agar aplikasi laravel dapat mengarahkan URL yang kita akses ke method dan controller yang kita inginkan dengan mengubah file app/route.php seperti berikut

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It's a breeze. Simply tell Laravel the URIs it should respond to
| and give it the Closure to execute when that URI is requested.
|
*/
Route::get('/', function()
{
	return View::make('hello');
});
Route::get('provinsi', 'ProvinsiController@index'); // route untuk menampilkan data provinsi
Route::get('provinsi/create', 'ProvinsiController@create'); // route untuk menampilkan form input provinsi
Route::post('provinsi/store', 'ProvinsiController@store'); // action untuk memproses data dari form provinsi
Route::get('provinsi/edit/{id}', 'ProvinsiController@edit'); // route untuk menampilkan form edit provinsi
Route::get('provinsi/destroy/{id}', 'ProvinsiController@destroy'); // action untuk menghapus data provinsi
Route::post('provinsi/update/{id}', 'ProvinsiController@update'); // action untuk mengubah data provinsi

3. Membuat Model

Nah, pada bagian ini kita akan membuat sebuah Model pada aplikasi Laravel kita, Pada kasus ini kita tidak akan menggunakan Query Builder melainkan Eloquent. Apa perbedaan Query Builder dengan Eloquent ? Saya akan jelaskan terlebih dahulu.

Query Builder adalah salah satu fitur dari framework Laravel yang menyediakan sebuah antarmuka untuk menciptakan dan menjalankan sebuah query dalam database. Query Builder menggunakan PDO parameter binding untuk melindungi aplikasi kita dari serangan injeksi SQL sehingga kita tidak perlu menyaring string secara manual.

Sedangkan Eloquent adalah salah satu fitur menarik yang dimiliki oleh Laravel yang dimana kita dapat berinteraksi dan memanipulasi database yang diinginkan. Setiap model Eloquent yang telah dibuat merupakan representasi dari tabel database yang sudah ada.

Salah satu keunggulan dari Eloquent daripada Query Builder adalah kita dapat membuat suatu query yang panjang dan kompleks dengan hanya beberapa sintaks saja.

silahkan buka dokumentasi resmi Laravel tentang Query Builder & Eloquent untuk mengetahui perbedaannya lebih jelas. Sekarang kita akan membuat Model dengan nama Provinsi.php dan kita simpan dalam direktori app/models.

<?php

class Provinsi extends Eloquent 
{
    // table yang akan digunakan
    public $table = 'provinsi';
}

4. Membuat Controller

Setelah membuat sebuah model pada Laravel sekarang kita beralih menuju Controller, buat sebuah Controller dengan nama ProvinsiController.php dan simpan dalam direktori app/controllers, ketikkan scriptnya seperti ini

<?php
class ProvinsiController extends BaseController 
{
	// layout dengan menggunakan blade
	public $layout 	= 'layout';
	public $title  	= 'Manajemen Provinsi';
	public function index() {
		$this->layout->title = $this->title;
		/* 
		* menggunakan view yang ada 
		* pada direktori views/provinsi/index
		*/
		$view = View::make('provinsi.index');
		/* 
		* query ini digunakan untuk menggunakan pagination pada Eloquent. 
		* angka 20 adalah jumlah data yg ditampilkan perhalaman
		* orderBy digunakan untuk menampilkan data dari id terakhir
		*/
		$view->provinsis = Provinsi::orderBy('id', 'DESC')->paginate(20);
		/*
		 * query ini digunakan untuk menghitung total data dari table provinsi
		 */
		$view->count = Provinsi::all()->count();
		// render semua konten view kedalam layout
		$this->layout->content = $view;
	}
	public function create() {
		$this->layout->title = $this->title;
		/* menggunakan view yang ada 
		 * pada direktori views/provinsi/form
		 */
		$view = View::make('provinsi.form');
		// form action untuk memproses form ke method yang lain 
		$view->form_action = url('provinsi/store');
		$view->form_title = 'add';
		$view->action_title = 'Tambah Provinsi';
		// render semua konten view ke dalam layout
		$this->layout->content = $view;
	}
	
	public function store() {
		/*  memanggil class model Provinsi
		 *  dan menyimpan data yang dikirim dari form
		 */
		$provinsi = new Provinsi;
		$provinsi->nama_provinsi = Input::get('nama_provinsi');
		$provinsi->save();
		// redirect ke route yang lain
		return Redirect::to('provinsi')->with('message', 'PROVINSI BERHASIL DISIMPAN');
	}
	public function edit($id) {
		$this->layout->title = $this->title;
		/* menggunakan view yang ada 
		 * pada direktori views/provinsi/form
		 */
		$view = View::make('provinsi.form');
		// form action untuk memproses form ke method yang lain 
		$view->form_action = url('provinsi/update/'.$id.'');
		$view->action_title = 'Ubah Provinsi';
		$view->form_title = 'edit';
		
		// query untuk mengambil data dari parameter
		$view->provinsi = Provinsi::find($id);
		$this->layout->content = $view;
	}
	
	public function update($id) {
		/*  memanggil class model Provinsi
		 *  lalu melakukan query untuk mengambil data dari DB 
		 *  dan memperbaharuinya dengan data yang dikirim dari form
		 */
		$provinsi  = Provinsi::find($id);
		$provinsi->nama_provinsi = Input::get('nama_provinsi');
		$provinsi->save();
		// redirect ke route yang lain
		return Redirect::to('provinsi')->with('message', 'PROVINSI BERHASIL DIUBAH');
	}
	
	public function destroy($id) {
		/*  memanggil class model Provinsi
		 *  lalu melakukan query untuk mengambil data dari DB 
		 *  dan menghapus datanya
		 */
		$provinsi = Provinsi::find($id);
		$provinsi->delete();
		// redirect ke route yang lain
		return Redirect::to('provinsi')->with('message', 'PROVINSI BERHASIL DIHAPUS');
	}
}

5. Membuat Layout Template Dengan Blade

OK, sekarang kita akan membuat views untuk aplikasi crud laravel yang kita buat. pertama kita buat terlebih dahulu layoout dengan menggunakan Blade, fungsi dari Blade Templating ini memudahkan kita saat akan membuat aplikasi dengan laravel yang memiliki banyak halaman tapi dengan layout yang sama.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- main title -->
    <title>{{ $title }}</title>
    <link href="{{ url('packages/css/bootstrap.min.css') }}" rel="stylesheet">
    <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
    <!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
    <!--[if lt IE 9]>
      <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
      <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
    <![endif]-->
    <style type="text/css">
	body{
		padding-top: 20px;
	}
    </style>
  </head>
  <body>
    <div class="container">
      <!-- inilah main content kita -->
      {{ $content }}
    </div>
    <script src="{{ url('packages/js/jquery.min.js') }}"></script>
    <script src="{{ url('packages/js/bootstrap.min.js') }}"></script>
  </body>
</html>

Setelah itu baru kita membuat halaman untuk menampilkan data yang akan kita tampilkan. buatlah direktori bernama provinsi pada /app/views/ dan buat file bernama index.blade.php. Isinya seperti berikut

<div class="row">
  <div class="col-lg-12">
  		<h2>Provinsi</h2>
  		<p style="float:right;">
  		<a class="btn btn-primary" href="{{ url('provinsi/create') }}"><i class="fa fa-plus"></i> Tambah Provinsi</a>
  		</p>
  		<br><br>
  		@if ($count > 0)
  			@if(Session::has('message'))
				<br><br>
			    <div class="alert alert-success">
			    	<button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">×</span></button>
			        <center>{{ Session::get('message') }}</center>
			    </div>
			@endif
	        <table class="table table-bordered">
	            <thead>
	            <tr>
	                <th><center>#</center></th>
	                <th><center>Nama Provinsi</center></th>
	                <th colspan="2"><center>Action</center></th>
	            </tr>
	            </thead>
	            <tbody>
	            <?php
	            $page = $provinsis->getCurrentPage();
	            if ($page == 1) {
	            	$i = 1;
	            } else {
	            	$i = $provinsis->getFrom();
	            }
	            ?>
	            @foreach ($provinsis as $provinsi)
	            <tr>
	            	<td><center>{{ $i }}</center></td>
	                <td>{{ $provinsi->nama_provinsi }}</td>
	                <td><center><a href="{{ url('provinsi/edit/'.$provinsi->id.'') }}">Ubah</a></center></td>
	                <td><center><a data-toggle="modal" href="#confirm{{ $i }}">Hapus</a></center></td>
	            </tr>
	            <div class="modal fade" id="confirm{{ $i }}" style="display:none;">
	                <div class="modal-dialog">
	                    <div class="modal-content">
	                        <div class="modal-header">
	                            <button class="close" data-dismiss="modal">×</button>
	                            <h4>Konfirmasi</h4>
	                        </div>
	                        <div class="modal-body">
	                            <p>Anda Yakin Menghapus Data Ini ?</p>
	                        </div>
	                        <div class="modal-footer">
	                            <a class="btn btn-primary" href="{{ url('provinsi/destroy/'.$provinsi->id.''); }}" >Ya</a>
	                            <a href="#" data-dismiss="modal" class="btn btn-danger">Tidak</a>
	                        </div>
	                    </div>
	                </div>
            	</div>
	            <?php $i++; ?>
	            @endforeach
	            </tbody>
	        </table>
	        <ul class="pagination">
			{{ $provinsis->links() }}
			</ul>
		@else
	    <br><br>
	    <div class="alert alert-danger"><center>DATA PROVINSI KOSONG</center></div>
	    @endif
  </div>
</div>

Setelah itu kita buat halaman baru untuk menampilkan form simpan sekaligus edit data. masih di direktori provinsi, buat file bernama form.blade.php. Isinya seperti berikut :

<form class="form-vertical" id="form" method="POST" action="{{ $form_action }}">
<fieldset>
    <legend>{{ $action_title }}</legend>
    <div class="col-lg-8">
        <div class="form-group">
          <label for="order">Nama Provinsi</label>  
          <input id="nama_provinsi" name="nama_provinsi" value="{{ isset($provinsi->nama_provinsi) ? $provinsi->nama_provinsi : '' }}" type="text" placeholder="" class="form-control input-md">
        </div>
        <div class="form-group">
            <button id="" name="" class="btn btn-primary">SIMPAN DATA</button>
        </div>
    </div>
</fieldset>
</form>

Saya hanya menggunakan 1 form saja untuk 2 aksi sekaligusdan hanya membedakan form tersebut dari variable $form_action saja.

Setelah itu kita tinggal akses di http://localhost/laracrud/public/provinsi. Outputnya seharusnya seperti berikut :

Tutorial Laravel - Membuat CRUD Menggunakan Laravel & MySQL - Demo

Sekian dulu untuk tutorialnya, kalau kamu ingin mendownload full sourcenya, kamu bisa clone di Github saya. Silahkan dicoba dan semoga bermanfaat.

UPDATE : Menampilkan Data Menggunakan Datatables di Laravel

clone-repo

El Cicko

Nama saya Riky Fahri Hasibuan, Saya yang biasa nulis di blog ini. Blog ini adalah sarana dokumentasi dari apa yang saya kerjakan dan tidak ada salahnya juga saya sebarkan. Jika artikel di blog bermanfaat, kamu bisa memberikan apresiasi pada blog ini dengan memberikan donasi pada blog ini.

7 Komentar

miku · Desember 2, 2015 pada 9:54 am

Warning: require(C:\xampp\htdocs\laracrud\bootstrap/../vendor/autoload.php): failed to open stream: No such file or directory in C:\xampp\htdocs\laracrud\bootstrap\autoload.php on line 17

Fatal error: require(): Failed opening required ‘C:\xampp\htdocs\laracrud\bootstrap/../vendor/autoload.php’ (include_path=’.;C:\xampp\php\PEAR’) in C:\xampp\htdocs\laracrud\bootstrap\autoload.php on line 17

itu kenapa ? soalnya aku masih newbie

taufik · Januari 14, 2016 pada 8:09 pm

mau nanya mas,, saya baru pakai ubuntu 14.04, knpa saya jalankan file laracrud nya, kenapa yang tampil waktu pertama kali menginstal laravel,,
apa yang saya setting agar program laracrudnya bisa jalan di ubuntu say ya mas,,,???
makasih

    El Cicko · Januari 15, 2016 pada 12:26 pm

    Hal yang harus diperhatikan waktu menginstall Laravel di Sistem Operasi Ubuntu

    • Perhatikan hak ases file
    • Sistem mas taufik harus sudah terinstall Composer
    • Perhatikan pula versi PHP yang terinstall, minimal adalah versi 5.4

    Segitu gan, mudah-mudahan membantu 😀

Mac · Januari 4, 2017 pada 10:24 pm

Apa perbedaan :
Route::get(‘/’, function(){
return View::make(‘ProvinsiController@index’);
});

dan

Route::get(‘/’, ‘ProvinsiController@index’);

    El Cicko · Januari 5, 2017 pada 9:30 am

    yang pertama itu salah kayaknya, kalau mau langsung load ke view ga usah ke controller. kalo yang kedua itu artinya ketika url pattern-nya
    “/” maka dia load ke controller provinsi lalu ke method index.

DALLE CARNEGIE · Juni 9, 2017 pada 5:38 am



body{
padding-top: 20px;
}


{{ $content }}

INI NAMA FILE NYA APA MAS ?

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *