Membuat CRUD Laravel 5
Membuat CRUD Laravel 5
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();
app/Pegawai.php
<?php namespace App;
use Illuminate\Database\Eloquent\Model;
class Pegawai extends Model {
//
}
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()
{
//
}
/**
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.
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
...
/**
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>
</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'
];
}
{
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
...
/**
...
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>
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);
...
resources/views/pegawai/edit.blade.php
@extends('layouts.master')
@section('content')
<div class="row">
<div class="col-lg-12">
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!');
}
...
app/Http/Controllers/PegawaiController.php
...
/**