Вы находитесь на странице: 1из 13

CRUD (Create, Read, Update, Delete) merupakan suatu operasi yang digunakan hampir di setiap

project aplikasi. Dan laravel membantu membuat proses operasi CRUD menjadi lebih mudah
dengan menggunakan controller. Dengan controller dan penggunaan teknik RESTful pada
routing laravel telah memberikan kemudahan pada pengembang project. Kali ini kita akan
mencoba membuat operasi CRUD sederhana dengan menggunakan RESTful pada Laravel 5.
Ikuti setiap langkahnya.
Buat project baru. Bagi pengguna baru Laravel 5 bisa baca kembali Tutorial Instalasi Laravel 5.
Lakukan konfigurasi database pada file database.php di config/database.php, atau pada file
.env folder project. (tutorial menggunakan database MySQL)
config/database.php
'mysql' => [
'driver'
'host'
'database'
'username'
'password'
'charset'
'collation'
'prefix'
'strict'

=>
=>
=>
=>
=>
=>
=>
=>
=>

'mysql',
env('DB_HOST', 'localhost'),
env('DB_DATABASE', 'laraveldb'),
env('DB_USERNAME', 'root'),
env('DB_PASSWORD', ''),
'utf8',
'utf8_unicode_ci',
'',
false,

],

Untuk membuat tabel Anda dapat langsung membuatnya menggunakan DBMS atau dengan
migration yang disediakan laravel.
Buka terminal atau command prompt (cmd) dan buat migration dengan perintah php artisan
make:migration create_pegawai_table --create=pegawai

Kemudian buka file ####_##_##_######_create_pegawai_table.php di


database/migrations dan ketikan perintah berikut.
database/migrations/####_##_##_######_create_pegawai_table.php
<?php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class CreatePegawaiTable extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('pegawai', function(Blueprint $table)
{
$table->increments('id');
$table->string('nama', 255);

$table->string('email', 255);
$table->integer('level');
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::drop('pegawai');
}
}

Sekarang buka terminal/command prompt lagi dan jalankan perintah php artisan migrate.
Kemudian lihat kembali database yang telah dibuat sebelumnya, maka akan ada tabel baru yang
siap digunakan.
Baca dokumentasi lengkapnya tentang migrations di Laravel docs Migration & Seeding
Buat Project Model
Buka terminal/command prompt dan jalankan perintah php artisan make:model Pegawai
Dan class baru akan dibuat di app/Pegawai.php
app/Pegawai.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Pegawai extends Model {
//
}

Anda bisa membaca dokumentasi lengkap mengenai Model di Laravel docs Eloquent ORM
Buat project Controller
Buka terminal/cmd jalankan perintah berikut php artisan make:controller
PegawaiController

Class baru akan dibuat di app/Http/Controllers


app/Http/Controllers/PegawaiController.php
<?php namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;

use Illuminate\Http\Request;
class PegawaiController extends Controller {
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store()
{
//
}
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
//
}
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
//
}
/**

* Update the specified resource in storage.


*
* @param int $id
* @return Response
*/
public function update($id)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
//
}
}

Setting Routes dengan RESTful controller


Dalam laravel 5, resource controller mendefinisikan semua routes untuk diberikan penamaan
resource mengikuti aturan pada RESTful. Sekarang kita perlu mengenerated controller yang
telah kita buat, buka di app/Http/routes.php dan tambahkan route berikut:
app/Http/routes.php
<?php
Route::resource('pegawai', 'PegawaiController');

Untuk melihat hasil routes yang telah dibuat yang ada pada project Anda dapat menjalankan
perintah php artisan route:list di terminal/command prompt.
Anda dapat membaca dokumentasi lengkapnya di Larave docs HTTP Controllers
Sekarang kita beralih ke layout.
Lakukan terlebih dahulu konfigurasi untuk html dan form. Karena project kali ini kita akan
membuat Create dan Update dengan memanfaatkan penggunaan form.
Untuk yang belum pernah melakukan konfigurasi html dan form Anda bisa membacanya di
artikel Konfgurasi Html Pada Laravel 5 dan Anda bisa langsung mempraktekannya dengan
mengikuti langkah-langkahnya.
Buat layout untuk project
Masuk ke direktori resources/view dan buat folder baru includes dan buat file
header.blade.php isi dengan code berikut:
resources/view/includes/header.blade.php
<div class="container">

<nav class="navbar navbar-inverse">


<div class="navbar-header">
<a class="navbar-brand" href="{{ URL('pegawai') }}">Data Pegawai</a>
</div>
<ul class="nav navbar-nav">
<li><a href="{{ URL('pegawai') }}">Lihat Daftar</a></li>
<li><a href="{{ URL('pegawai/create') }}">Buat Data Baru</a>
</ul>
</nav>

Buat lagi folder baru layouts dan buat file master.blade.php isi dengan code berikut:
resources/view/layouts/master.blade.php
<!DOCTYPE html>
<html lang="en">
<head>
<title>Belajar CRUD</title>
<link rel="stylesheet"
href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
</head>
<body>
@include('includes.header')
<!-- /.navbar-collapse -->
<!-- Page Heading -->
@yield('content')
<!-- /.row -->
</body>
</html>

Menampilkan resource index()


Sekarang buka file PegawaiController.php di app/Http/Controllers dan modifikasi fungsi
index() menjadi seperti berikut:
app/Http/Controllers/PegawaiController.php
...
/**
* Display a listing of the resource.
*
* @return Response
*/
public function index()
{
// ambil semua data pegawai
$pegawai = Pegawai::latest('created_at')->get();
return view('pegawai.index', compact('pegawai'));
}
...

Buat folder baru pegawai di resources/views dan buat file index.blade.php isikan code
berikut:

resources/views/pegawai/index.blade.php
@extends('layouts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<h1>Daftar Pegawai</h1>
<!-- digunakan untuk menampilkan pesan -->
@if (Session::has('message'))
<div class="alert alert-info">{{ Session::get('message') }}</div>
@endif
<table class="table table-striped table-bordered">
<thead>
<tr>
<td>ID</td>
<td>Nama</td>
<td>Email</td>
<td>Level</td>
<td>Actions</td>
</tr>
</thead>
<tbody>
@foreach($pegawai as $key => $value)
<tr>
<td>{{ $value->id }}</td>
<td>{{ $value->nama }}</td>
<td>{{ $value->email }}</td>
<td>{{ $value->level }}</td>
<!-- untuk menambahkan tombol tampil, edit, dan hapus -->
<td>
<a class="btn btn-small btn-success" href="{{ URL('pegawai/'
. $value->id) }}">Tampilkan Data</a>
<a class="btn btn-small btn-warning" href="{{ URL('pegawai/'
. $value->id . '/edit') }}">Ubah Data</a>
{!! Form::open(['url' => 'pegawai/' . $value->id, 'class' =>
'pull-right']) !!}
{!! Form::hidden('_method', 'DELETE') !!}
{!! Form::submit('Hapus Data', ['class' => 'btn btndanger']) !!}
{!! Form::close() !!}
</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
@stop

Buat resource baru create()


Buka kembali file PegawaiController.php dan tambahkan pada fungsi create() seperti
berikut:
app/Http/Controllers/PegawaiController.php
...
/**
* Show the form for creating a new resource.
*
* @return Response
*/
public function create()
{
return view('pegawai.create');
}
...

Fungsi create ini akan menampilkan form yang akan digunakan untuk membuat data pegawai
baru yang kemudian dari form ini akan diproses pada store() method.
Buat file baru create.blade.php pada folder pegawai dan isi code menjadi seperti berikut:
resources/views/pegawai/create.blade.php
@extends('layouts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<h1>Buat Data Baru</h1>
<!-- jika terjadi error, maka akan menampilkan pesan -->
@if ($errors->any())
<ul class="alert alert-danger">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
{!! Form::open(['url' => 'pegawai']) !!}
<div class="form-group">
{!! Form::label('nama', 'Nama') !!}
{!! Form::text('nama', null, ['class' => 'form-control',
'placeholder' => 'masukan nama']) !!}
</div>
<div class="form-group">
{!! Form::label('email', 'Email') !!}
{!! Form::email('email', null, ['class' => 'form-control',
'placeholder' => 'masukan email']) !!}
</div>
<div class="form-group">

{!! Form::label('level', 'Level') !!}


{!! Form::select('level', [' ' => 'Pilih Level', '1' => 'Level 1',
'2' => 'Level 2', '3' => 'Level 3'], null, ['class' => 'form-control']) !!}
</div>
{!! Form::submit('Buat data pegawai', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
</div>
</div>
@stop

Pada store() method kita akan membuatnya untuk melakukan validasi input data yang kita
masukan dan mengirim pesan error apabila form tidak diisi atau tidak sesuai.
Buat file class CreatePegawaiRequest.php di Request, file ini yang nantinya akan dipanggil
pada store() method untuk melakukan validasi dan mengirim pesan error.
app/Http/Requests/CreatePegawaiRequest.php
<?php namespace App\Http\Requests;
use App\Http\Requests\Request;
class CreatePegawaiRequest extends Request {
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'nama'
=> 'required',
'email'
=> 'required|email',
'level'
=> 'required|numeric'
];
}
public function messages()
{
return [
'nama.required' => 'Kolom nama harus diisi',
'email.required' => 'Kolom email belum diisi',
'email.email'
=> 'Email tidak sesuai',

'level.required' => 'Level pegawai belum dipilih',


'level.numeric' => 'Level pegawai tidak sesuai'
];
}
}

Storing resource strore()


Update file PegawaiController.php modifikasi fungsi store() method menjadi seperti
berikut:
app/Http/Controllers/PegawaiController.php
...
/**
* Store a newly created resource in storage.
*
* @return Response
*/
public function store(CreatePegawaiRequest $request)
{
Pegawai::create($request->all());
return redirect('pegawai')->with('message', 'Data berhasil
ditambahkan!');
}
...

Menampilkan resource show()


Modifikasi juga resource showing pada fungsi show() untuk menampilkan data yang sudah
diinputkan.
app/Http/Controllers/PegawaiController.php
...
/**
* Display the specified resource.
*
* @param int $id
* @return Response
*/
public function show($id)
{
$pegawai = Pegawai::find($id);
return view('pegawai.show', compact('pegawai'));
}
...

Buat file baru show.blade.php di folder pegawai isi code seperti berikut:
resources/views/pegawai/show.blade.php
@extends('layouts.master')
@section('content')

<div class="row">
<div class="col-lg-12">
<h1>Tampilkan Data Pegawai</h1>
<div class="jumbotron text-center">
<h2>{{ $pegawai->nama }}</h2>
<p>
<strong>Email :</strong> {{ $pegawai->email }}<br>
<strong>Level :</strong> {{ $pegawai->level }}
</p>
</div>
</div>
</div>
@stop

Editing resource edit()


Untuk melakukan edit data pegawai kita perlu mengambil data dari database terlebih dahulu, dan
menampilkannya kedalam form setelah melakukan selected pada data yang akan di edit. Kita
akan sedikit menambahkan code perintah pada file Model Pegawai.php yang berfungsi untuk
menarik datanya.
Tambahkan code berikut kedalam file Pegawai.php.
app/Pegawai.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Pegawai extends Model {
protected $table = 'pegawai';
protected $fillable = ['nama', 'email', 'level'];
}

Ubah fungsi edit() pada file PegawaiController.php menjadi seperti berikut:


app/Http/Controllers/PegawaiController.php
...
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$pegawai = Pegawai::find($id);
return view('pegawai.edit', compact('pegawai'));
}
...

Buat file baru edit.blade.php pada folder pegawai.


resources/views/pegawai/edit.blade.php
@extends('layouts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
<h1>Edit {{ $pegawai->nama }}</h1>
<!-- jika terjadi error, akan menampilkan pesan -->
@if ($errors->any())
<ul class="alert alert-danger">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
{!! Form::model($pegawai, ['route' => ['pegawai.update', $pegawai->id],
'method' => 'PUT']) !!}
<div class="form-group">
{!! Form::label('nama', 'Nama') !!}
{!! Form::text('nama', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('email', 'Email') !!}
{!! Form::email('email', null, ['class' => 'form-control']) !!}
</div>
<div class="form-group">
{!! Form::label('level', 'Level') !!}
{!! Form::select('level', [' ' => 'Select a Level', '1' => 'Level 1',
'2' => 'Level 2', '3' => 'Level 3'], null, ['class' => 'form-control']) !!}
</div>
{!! Form::submit('Edit Data', ['class' => 'btn btn-primary']) !!}
{!! Form::close() !!}
</div>
</div>
@stop

Updating resource update()


Controller ini akan melakukan proses form edit, mirip seperti pada method store() sebelumnya.
Kita akan melakukan validasi, update dan redirect.
Lakukan modifikasi pada fungsi update() seperti berikut:
app/Http/Controllers/PegawaiController.php
...

/**
* Update the specified resource in storage.
*
* @param int $id
* @return Response
*/
public function update($id)
{
$pegawaiUpdate = Request::all();
$pegawai = Pegawai::find($id);
$pegawai->update($pegawaiUpdate);
return redirect('pegawai')->with('message', 'Data berhasil
dirubah!');
}
...

Deleting resource destroy()


Tambahkan code berikut pada fungsi destroy()
app/Http/Controllers/PegawaiController.php
...
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
Pegawai::find($id)->delete();
return redirect('pegawai')->with('message', 'Data berhasil
dihapus!');
}
...

Selesai.
Buka terminal/command prompt(cmd) jalankan perintah php artisan serve, lakukan
penambahan data, edit data, hapus data untuk melakukan testing pada project CRUD yang baru
saja dibuat.

Sekian tutorial Programming Laravel kali ini, semoga bermanfaat. #HappyCoding


http://salatigadev.com/membuat-crud-di-laravel-5-dengan-restful/

Вам также может понравиться