CRUD di Laravel 5.8 Pada Linux Mint 19

By | Maret 11, 2020

MWI – CRUD adalah akronim untuk Create, Read, Update, dan Delete. Operasi CRUD adalah manipulasi data dasar untuk database. Dalam tutorial ini kita akan membuat aplikasi Perpustakaan untuk Tabel Buku menggunakan Framework Laravel versi 5.8, untuk melakukan semua operasi ini pada tabel database MySQL.

Kebutuhan Minimal

Sebelum kita mulai, untuk Framework Laravel 6.0 (versi terbaru saat tutorial ini ditulis), kebutuhan minimum dari aplikasi yang digunakan adalah:

  • PHP >= 7.2.0
  • BCMath PHP Extension
  • Ctype PHP Extension
  • JSON PHP Extension
  • Mbstring PHP Extension
  • OpenSSL PHP Extension
  • PDO PHP Extension
  • Tokenizer PHP Extension
  • XML PHP Extension

artinya versi PHP minimal 7.2.0 dengan extensi yang disebutkan dibawahnya harus sudah terinstall dan aktif.

Skema Database

Kita akan belajar CRUD (Create, Read, Update dan Delete) dengan data yang kita olah adalah data perpustakaan dengan 1 tabel untuk praktek kita. beri nama database pustaka dan tabel buku dan peminjam

Tabel: peminjam

No Nama Field Jenis Ukuran Keterangan
1 id int 10 PK, AI
2 nama varchar 50
3 kelas varchar 30
4 jk varchar 1
5 alamat varchar 255
6 hp varchar 15

Tabel: buku

No Nama Field Jenis Ukuran Keterangan
1 id int 10 Primary, AI
2 judul varchar 100
3 pengarang varchar 50
4 penerbit varchar 50
5 tahun varchar 4

Install

Untuk instal dapat merujuk ke tutorial install laravel, atau gunakan composer create project, jika composer belum install install terlebih dahulu ikuti panduan ini

composer create-project --prefer-dist laravel/laravel pustaka

buat database bisa menggunakan phpmyadmin atau adminer, contoh disini kita menggunakan terminal (CLI – Command Prompt) untuk menjalankannya.

mysql -uroot -p
mysql> create database pustaka;
Query OK, 1 row affected (0.08 sec)

Keluar dengan perintah exit; atau tekan Ctrl + D.

Berikan hak akses penuh untuk user dan dan web dengan perintah

chmod 775 -R pustaka
sudo chown muhidin:www-data -R pustaka

Lanjutkan dengan edit file .env dan sesuaikan isinya:

cd pustaka
geany .env
-----------
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=pustaka
DB_USERNAME=root
DB_PASSWORD=tkjtkj
------------------------

Migrations

Gunakan fitur Migrations pada laravel untuk mengontrol seluruh perubahan dari struktur database melalui code. Buat model untuk tabel buku dengan perintah

php artisan make:model Buku -m

Perintah diatas akan membuat model dengan nama Buku beserta table migrations-nya. Buka file migration yang baru dibuat pada folder pustaka/database/migrations dan ubah isinya menjadi

<?php

use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateBukusTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        //hilangkan s pada bukus
        Schema::create('buku', function (Blueprint $table) {
            $table->increments('id');
            $table->string('judul', 100)->nullable;
            $table->string('pengarang', 50)->nullable;
            $table->string('penerbit', 50)->nullable;
            $table->string('tahun', 4)->nullable;
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        //hilangkan s pada bukus
        Schema::dropIfExists('buku');
    }
}

Nama tabel secara default akan ditambah huruf s dibelakang nya sebagai bentuk plural (jamak), jika tidak hapus huruf s dan sesuaikan. tabel buku akan menampung id (buku) dengan isian otomatis, judul (buku) dengan maksimal panjang karakter yang dapat ditampung 100 karakter dan dapat dikosongkan

Berikan Perintah migrate agar editan kita diatas langusng dieksekusi (buat tabel), dengan perintah

php artisan migrate

R (Read) – cRud

Fungsi pertama dari CRUD yang akan kita bahas adalah R (Read) yaitu menampilkan data dari database agar dapat dilihat oleh user yang sedang menggunakan aplikasi tersebut. Schema-nya adalah kumpulan data dari table buku akan ditampilkan kedalam list table, sehingga ada 3 hal yang berperan, yakni: Controller, Model dan View.

Karena nama tabel yang kita buat berbeda dengan default laravel (tambahkan s dibelakang nama model), maka kita harus edit dahulu file model Buku.php (pustaka/app) dan sesuaikan menjadi

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Buku extends Model
{
    //sesuaikan dengan nama tabel yang diuabh
    public $table = "buku";
    //jika field PK bukan id tambahkan
    //protected $primaryKey = 'kdbuku';
}

Controller berperan untuk menghubungkan antara Model dan View, Model berperan untuk berinteraksi dengan database, sedangkan View berperan untuk melakukan delivery untuk menampilkan data yang ada. Langsung saja kita praktekkan dalam bentuk coding-an, buka terminal, lalu jalankan perintah berikut untuk memembuat controller secara otomatis

php artisan make:controller BukuController

buka file BukuController.php ada difolder pustaka/app/Http/Controllers modifikasi menjadi

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Buku; //load  model

class BukuController extends Controller
{
    //
    public function index()
    {
        $buku = Buku::orderBy('created_at', 'DESC')->get();
        return view('buku.index', compact('buku'));
    }
}

Sebelum buat view, kiat generate dahulu template blade dari laravel sekaligus untuk authentikasi (login), dengan perintah

php artisan make:auth

Lanjutkan dengan membuat folder buku di pustaka/resources/views, buat file index.blade.php dan isi dengan

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <div class="row">
                            <div class="col-md-6">
                                <h3 class="card-title">Data Buku</h3>
                            </div>
                            <div class="col-md-6">
                                <a href="{{ url('/buku/tambah') }}" class="btn btn-primary btn-sm float-right">Tambah Data</a>
                            </div>
                        </div>
                    </div>
                    <div class="card-body">
                        @if (session('success'))
                            <div class="alert alert-success">
                                {!! session('success') !!}
                            </div>
                        @endif
                        <table class="table table-hover table-bordered">
                            <thead>
                                <tr>
                                    <th>No</th>
                                    <th>Judul Buku</th>
                                    <th>Pengarang</th>
                                    <th>Penerbit</th>
                                    <th>Tahun Terbit</th>
                                    <th>Aksi</th>
                                </tr>
                            </thead>
                            <tbody>
                                @forelse($buku as $no => $bk)
                                <tr>
                                    <td>{{ $no+1 }}</td>
                                    <td>{{ $bk->judul }}</td>
                                    <td>{{ $bk->pengarang }}</td>
                                    <td>{{ $bk->penerbit }}</td>
                                    <td>{{ $bk->tahun }}</td>
                                    <td>
                                        <form action="{{ url('/buku/' . $bk->id) }}" method="POST">
                                            @csrf
                                            <input type="hidden" name="_method" value="DELETE" class="form-control">
                                            <a href="{{ url('/buku/' . $bk->id) }}" class="btn btn-warning btn-sm">Edit</a>
                                            <button class="btn btn-danger btn-sm" onclick="return confirm('Yakin dihapus?')">Hapus</button>
                                        </form>
                                    </td>
                                </tr>
                                @empty
                                <tr>
                                    <td class="text-center" colspan="6">Tidak ada data</td>
                                </tr>
                                @endforelse
                            </tbody>
                        </table>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

edit route pada file web.php dan tambahkan

Route::group(['prefix' => 'buku'], function() {
    Route::get('/', 'BukuController@index');
    Route::get('/tambah', 'BukuController@tambah');
    Route::post('/', 'BukuController@simpan');
    Route::get('/{id}', 'BukuController@edit');
    Route::put('/{id}', 'BukuController@update');
	Route::delete('/{id}', 'BukuController@hapus');
});

Cek hasil program dengan membuka browser dan ketikan pada address bar (asumsi folder pustaka di letakan di folder web browser)

http://localhost/pustaka/buku

jika tidak ada eror akan muncul seperti ini (di saya)

Hasil CRUD untuk R – index.php

C (Create) – Crud

Fungsi selanjutnya adalah untuk menambahkan data kedalam table buku. Adapun schema-nya tentu saja adalah sebuah form untuk meng-input data yang kemudian akan diteruskan ke Controller untuk diolah dan disimpan kedalam table buku.

Buka file BukuController.php kemudian tambahkan yang diberi tanda

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Buku;

class BukuController extends Controller
{
    // view index
    public function index()
    {
        $buku = Buku::orderBy('created_at', 'DESC')->get();
        return view('buku.index', compact('buku'));
    }
    // view tambah
    public function tambah()
    {
        return view('buku.tambah');
    }
}

ketika tombol tambah di klik akan diarahkan ke BukuController yang akan membaca fungsi tambah lalu akan membuka filw views pada folder buku dengan file tambah.blade.php

Buat file tambah.blade.php di folder pustaka/resources/views/buku/ dengan isi

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <h3 class="card-judul">Tambah Data Buku</h3>
                    </div>
                    <div class="card-body">
                        @if (session('error'))
                            <div class="alert alert-danger">
                                {{ session('error') }}
                            </div>
                        @endif

                        <form action="{{ url('/buku') }}" method="post">
                            @csrf
                            <div class="form-group">
                                <label for="">Judul Buku</label>
                                <input type="text" name="judul" class="form-control" placeholder="Masukkan Judul Buku">
                            </div>
                            <div class="form-group">
                                <label for="">Pengarang</label>
                                <input type="text" name="pengarang" class="form-control" placeholder="Masukkan Nama Pengarang">
                            </div>
                            <div class="form-group">
                                <label for="">Penerbit</label>
                                <input type="text" name="penerbit" class="form-control" placeholder="Masukkan Nama Penerbit">
                            </div>
                            <div class="form-group">
                                <label for="">Tahun Terbit</label>
                                <input type="number" name="tahun" class="form-control">
                            </div>
                            <div class="form-group">
                                <input type="reset">
                                <button class="btn btn-primary btn-md">Simpan</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

Jalan dan akan tampil

Create – CRUD

Agar tombol Simpan dapat berfungsi, tambahkan beberapa code di model dan controller. kita kerjakan di file model dahulu, tepatnya file Buku.php pada folder pustaka/app/ tambahkan dibawah public $table=”buku”

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Buku extends Model
{
    public $table = "buku";
    //protected $primaryKey = 'kdbuku';
    protected $guarded = [];
}

Lalu kerjakan pada controller BukuController, letakan dibawah public function tambah() { }

    public function simpan(Request $request)
    {
        $this->validate($request, [
            'judul' => 'required|string',
            'pengarang' => 'string',
            'penerbit' => 'string',
            'tahun' => 'integer'
        ]);

        try {
            $buku = Buku::create([
                'judul' => $request->judul,
                'pengarang' => $request->pengarang,
                'penerbit' => $request->penerbit,
                'tahun' => $request->tahun
            ]);
            return redirect('/buku')->with(['success' => '<strong>' . $buku->judul . '</strong> Telah disimpan']);
        } catch(\Exception $e) {
            return redirect('/buku/tambah')->with(['error' => $e->getMessage()]);
        }
    }

U (Update) – crUd

Perubahan data adalah sesuatu yang pasti terjadi pada sebuah aplikasi karena kesalahan dalam entry data sering kali terjadi meskipun hanya sebuah kesalahan kecil seperti typo, sehingga sebagai developer kita perlu menyediakan fitur untuk mengubah atau mengedit data.

Dalam fitur ini terdapat dua step yang berperan, step pertama adalah menampilkan data apa yang akan di ubah dan step selanjutnya adalah melakukan perubahan terhadap data itu sendiri kedalam database. Buka file BukuController.php, kemudian tambahkan function edit dan function update sebagai berikut:

    // View Update - bagian EDIT
    public function edit($id)
    {
        $buku = Buku::find($id);
        return view('buku.edit', compact('buku'));
    }
    // bagian update setelah edit
    public function update(Request $request, $id)
    {
        $buku = Buku::find($id);
        $buku->update([
            'judul' => $request->judul,
            'pengarang' => $request->pengarang,
            'penerbit' => $request->penerbit,
            'tahun' => $request->tahun
        ]);
        return redirect('/buku')->with(['success' => '<b>' . $buku->judul . '</b> Diperbaharui']);
    }

sedangkan pada bagian views (file edit.blade.php) yang ada di folder buku isinya adalah (isi file edit di copas dari file tambah dengan beberapa penyesuaian)

@extends('layouts.app')

@section('content')
    <div class="container">
        <div class="row">
            <div class="col-md-12">
                <div class="card">
                    <div class="card-header">
                        <h3 class="card-judul">Tambah Data Buku</h3>
                    </div>
                    <div class="card-body">
                        @if(session('error'))
                            <div class="alert alert-danger">
                                {{ session('error') }}
                            </div>
                        @endif

                        <form action="{{ url('/buku/' . $buku->id) }}" method="post">
                            @csrf
                            <input type="hidden" name="_method" value="PUT" class="form-control">
                            <div class="form-group">
                                <label for="">Judul Buku</label>
                                <input type="text" name="judul" class="form-control" value="{{ $buku->judul }}" placeholder="Masukkan Judul Buku">
                            </div>
                            <div class="form-group">
                                <label for="">Pengarang</label>
                                <input type="text" name="pengarang" class="form-control" value="{{ $buku->pengarang }}" placeholder="Masukkan Nama Pengarang">
                            </div>
                            <div class="form-group">
                                <label for="">Penerbit</label>
                                <input type="text" name="penerbit" class="form-control" value="{{ $buku->penerbit }}" placeholder="Masukkan Nama Penerbit">
                            </div>
                            <div class="form-group">
                                <label for="">Tahun Terbit</label>
                                <input type="number" name="tahun" class="form-control" value="{{ $buku->tahun }}">
                            </div>
                            <div class="form-group">
                                <input type="reset">
                                <button class="btn btn-primary btn-md">Simpan</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>
@endsection

Demikian sedikit tutorial tentang Update, dan akhirnya kita sampai pada 1 module terakhir tentang hapus alias Delete

D (Delete) – cruD

Fitur terakhir adalah menghapus buku yang telah diinput, baik karena salah atau hal lain. Fitur ini bekerja sangat sederhana karena ketika tombol ditekan maka akan langsung di-handle oleh controller kemudian dikembalikan kehalaman /buku, sehingga kita tidak memerlukan view baru lagi. Sebelum controller bekerja ada onclick bekerja yang akan cek benar atau tidak data akan dihapus (mencegah ada yg tak senagaj terklik tombol hapus)

    //Hapus
    public function hapus($id)
    {
        $buku = Buku::find($id);
        $buku->delete();
        return redirect('/buku')->with(['success' => '<b>' . $buku->judul . '</b> Berhasil Dihapus']);
    }

Data lengkapnya untuk controller menjadi

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Buku;

class BukuController extends Controller
{
    // view index
    public function index()
    {
        $buku = Buku::orderBy('created_at', 'DESC')->get();
        return view('buku.index', compact('buku'));
    }
    // view tambah
    public function tambah()
    {
        return view('buku.tambah');
    }
    // simpan setelah tambah
    public function simpan(Request $request)
    {
        $this->validate($request, [
            'judul' => 'required|string',
            'pengarang' => 'string',
            'penerbit' => 'string',
            'tahun' => 'integer'
        ]);

        try {
            $buku = Buku::create([
                'judul' => $request->judul,
                'pengarang' => $request->pengarang,
                'penerbit' => $request->penerbit,
                'tahun' => $request->tahun
            ]);
            return redirect('/buku')->with(['success' => '<b>' . $buku->judul . '</b> Telah disimpan']);
        } catch(\Exception $e) {
            return redirect('/buku/tambah')->with(['error' => $e->getMessage()]);
        }
    }
    // View Update - bagian EDIT
    public function edit($id)
    {
        $buku = Buku::find($id);
        return view('buku.edit', compact('buku'));
    }
    // bagian update setelah edit
    public function update(Request $request, $id)
    {
        $buku = Buku::find($id);
        $buku->update([
            'judul' => $request->judul,
            'pengarang' => $request->pengarang,
            'penerbit' => $request->penerbit,
            'tahun' => $request->tahun
        ]);
        return redirect('/buku')->with(['success' => '<b>' . $buku->judul . '</b> Diperbaharui']);
    }
    //Hapus
    public function hapus($id)
    {
        $buku = Buku::find($id);
        $buku->delete();
        return redirect('/buku')->with(['success' => '<b>' . $buku->judul . '</b> Berhasil Dihapus']);
    }
}

Untuk Model menjadi

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Buku extends Model
{
    public $table = "buku";
    //protected $primaryKey = 'kdbuku';
    protected $guarded = [];
}

untuk routes pada file web.php mejadi

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('/', function () {
    return view('welcome');
});

Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');
Route::group(['prefix' => 'buku'], function() {
    Route::get('/', 'BukuController@index');
    Route::get('/tambah', 'BukuController@tambah');
    Route::post('/', 'BukuController@simpan');
	Route::get('/{id}', 'BukuController@edit');
	Route::put('/{id}', 'BukuController@update');
	Route::delete('/{id}', 'BukuController@hapus');
});

Source Code

Sebagai perbandingan jika ada yang sedikit berbeda bisa cek dan ambil souce code yang sudah saya siapkan di github, silahkan download disini

Lalu ikuti petunjuk yang ada disana atau ikuti langkah-langkah sebagai berikut:

Membuat CRUD menggunakan Larave 6.0 studi kasus tabel Buku pada Perpustakaan

clone repository dengan perintah
$ git clone https://github.com/muhidin/crud-laravel.git

pilih folder project
$ cd crud-laravel

buat database melalui perintah mysql
$ mysql -uroot -p

pada prompt mysql berikan perintah membuat database dengan nama crud-laravel
mysql> create database crud-laravel;

selesai, kembali ke prompt dengan ctrl + D alias exit
mysql> exit;

Update composer dengan perintah
$ composer update

jalankan migrate agar tabel terbentuk
$ php artisan migrate

jalankan serve laravel atau langsung buka browser
$ php artisan serve

Demikian semoga bermanfaat dan sama seru ngoprek.

Penutup

Demikian arikel ini dibuat, semoga menambah manfaat untuk kita semua. Aamiin. Salam sukses dan salam seru dalam belajar (ngoding), dari sahabatmu musa (ms).

3 thoughts on “CRUD di Laravel 5.8 Pada Linux Mint 19

  1. Mohammad Teghar Affandi

    terima kasih banyak pak ilmunya insya allah bermanfaat bagi saya dan teman-teman

    Reply
  2. Pingback: CRUD Laravel Pustaka - Daftar Isi | Muhidin Saimin

Tinggalkan Balasan

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

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.