Anda di halaman 1dari 11

Membuat CRUD Laravel 5

Buat database baru pada mySql dengan nama dbLaravel.


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' => 'mysql',
'host'
=> env('DB_HOST', 'localhost'),
'database' => env('DB_DATABASE', 'dblaravel'),
'username' => env('DB_USERNAME', 'root'),
'password' => env('DB_PASSWORD', ''),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => 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.

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 {
//
}

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.
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.

Buat layout untuk project


Masuk ke direktori resources/view dan buat folder baru includes dan buat fileheader.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>

Data</a>

<a class="btn btn-small btn-warning" href="{{ URL('pegawai/' . $value->id . '/edit') }}">Ubah


{!! Form::open(['url' => 'pegawai/' . $value->id, 'class' => 'pull-right']) !!}
{!! Form::hidden('_method', 'DELETE') !!}
{!! Form::submit('Hapus Data', ['class' => 'btn btn-danger']) !!}
{!! 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 methodstore() 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.