Edit & Delete Data with DB Facade 




Assalamualaikum wr wb, apa kabarnya teman teman semua semoga baik baik saja. Pada blog kali ini saya akan memberikan materi mengenai Edit dan Delete data menggunakan DB Facade di dalam Laravel Setelah sebelumnya kita belajar mengenai Create data menggunakan DB Facade di dalam Laravel. Langsung saja kita masuk ke cara caranya, sebelum  itu siapkan terlebih daulu project Laravel yang kemarin, text editor, xampp, dan browser.

A. Edit Data with DB Facade  

1. Langkah Pertama

buka file siswa.blade.php pada folder view. Tambahkan kolom baru pada tabel untuk aksi Edit. Untuk Kodingan nya saya contohkan di bawah ini

<table class="table table-bordered text-center" id="dataTable" border="1" cellspacing="0" cellpadding="10" width="100%">
                <thead>
                    <tr align="center" class="text-dark">
                        <th>No</th>
                        <th>Foto</th>
                        <th>NIS</th>
                        <th>Nama Lengkap</th>
                        <th>Jenis Kelamin</th>
                        <th>Golongan Darah</th>
                        <th>Action</th>
                    </tr>
                </thead>
                @foreach ($siswa as $row)
                <tr align="center">
                    <td>{{$loop->iteration}}</td>
                    <td width="60"><img src="/image/ava.png" width="90%"></td>
                    <td>{{$row->nis}}</td>
                    <td>{{$row->nama_lengkap}}</td>
                    <td width="120">{{$row->jenis_kelamin}}</td>
                    <td width="140">{{$row->golongan_darah}}</td>
                    <td width="230">
                        <a href="{{ url('/data-siswa/' . $row->id . '/edit') }}" class="btn btn-warning" style="width:100px;" ><i class="fas fa-edit mr-1"></i>Edit</a>
                    </td>
                </tr>
                @endforeach        
            </table>


2. Langkah kedua

buka file web.php dan tambahkan route baru untuk diarahkan ke function edit di controller

Route::get('/data-siswa/{id}/edit','SiswaController@edit');

{id} adalah parameter yang harus ada pada url nya dan parameter tersebut akan dilempar ke controller


3. Langkah ketiga

buka file SiswaController.php dan buat function edit. untuk kodingannya bisa dilihat di bawah ini



public function edit(Request $request, $id) {

        $data['siswa'] = \DB::table('t_siswa')->find($id);
        return view ('form.form-siswa'$data);        

    }



Fungsi find() pada \DB::table adalah untuk mencari data pada t_siswa berdasarkan id atau primary keynya, sehingga return dari pemanggilan fungsi tersebut berupa objek


4. Langka keempat

buka file form-siswa.blade.php dan ubah kodingan yang sebelumnya menjadi kodingan di bawah ini 


<form action="{{ url('data-siswa', @$siswa->id) }}" method="POST">
            <!-- Digunakan untuk mengarahkan form ke siswa/{id} apabila view form-siswa.blade.php dipanggil oleh Controller dengan data $siswa (Edit Mode) -->
                
                @csrf
                
                <?php
                    $disabled = '';
                    if(!empty($siswa)) {
                        $disabled = 'disabled';
                    }
                ?>

                @if (!empty($siswa))
                    @method('PATCH')                    
                @endif
                <!-- Digunakan untuk menambahkan method PATCH apabila view form-siswa.blade.php dipanggil oleh Controller dengan data $siswa (Edit Mode) -->
                
                <div class="form-group">
                    <label for="nis" class="text-dark">NIS</label>
                    <input type="text" class="form-control" id="nis" name="nis" value="{{ old('nis', @$siswa->nis) }}" <?=$disabled?>>
                    <!-- Parameter pada fungsi old ditambah dengan nis dari objek $siswa berfungsi untuk menampilkan nilai default untuk input tersebut. $siswa berasal dari controller dan nama_lengkap merupakan nama kolom dari tabel t_siswa -->
                </div>
                <div class="form-group">
                    <label for="nama_lengkap" class="text-dark">Nama Lengkap</label>
                    <input type="text" class="form-control" id="nama_lengkap" name="nama_lengkap" value="{{ old('nama_lengkap', @$siswa->nama_lengkap) }}">
                    <!-- Parameter pada fungsi old ditambah dengan nama_lengkap dari objek $siswa berfungsi untuk menampilkan nilai default untuk input tersebut. $siswa berasal dari controller dan nama_lengkap merupakan nama kolom dari tabel t_siswa -->
                </div>
                <div class="form-group">
                    <label class="text-dark">Jenis Kelamin</label>
                    <div class="custom-control custom-radio">
                        <input type="radio" id="jenis_kelaminL" name="jenis_kelamin" class="custom-control-input" value="L" {{ old('jenis_kelamin', @$siswa->jenis_kelamin)=='L' ? 'checked' : '' }}>
                        <label class="custom-control-label text-dark" for="jenis_kelaminL">Laki - Laki</label>
                        <!-- Untuk input dengan tipe radio terpilih secara otomatis sesuai dengan datanya, digunakan if ternary untuk memeriksa apakah value dari old data ataupun nilai default sama dengan value dari input tersebut. -->
                    </div>
                    <div class="custom-control custom-radio">
                        <input type="radio" id="jenis_kelaminP" name="jenis_kelamin" class="custom-control-input" value="P" {{ old('jenis_kelamin', @$siswa->jenis_kelamin)=='P' ? 'checked' : '' }}>
                        <label class="custom-control-label text-dark" for="jenis_kelaminP">Perempuan</label>
                        <!-- Untuk input dengan tipe radio terpilih secara otomatis sesuai dengan datanya, digunakan if ternary untuk memeriksa apakah value dari old data ataupun nilai default sama dengan value dari input tersebut. -->
                    </div>
                </div>
                <div class="form-grup">
                    <label class="text-dark">Golongan Darah</label>
                    <select class="custom-select" name="golongan_darah">
                        <option disabled selected>[ Select Golongan Darah ]</option>
                        <option value="A" {{ old('golongan_darah', @$siswa->golongan_darah)=='A' ? 'selected' : '' }}>A</option>
                        <option value="AB" {{ old('golongan_darah', @$siswa->golongan_darah)=='AB' ? 'selected' : '' }}>AB</option>
                        <option value="B" {{ old('golongan_darah', @$siswa->golongan_darah)=='B' ? 'selected' : '' }}>B</option>
                        <option value="O" {{ old('golongan_darah', @$siswa->golongan_darah)=='O' ? 'selected' : '' }}>O</option>
                    </select>
                    <!-- Untuk input dengan tipe select terpilih secara otomatis sesuai dengan datanya, digunakan if ternary untuk memeriksa apakah value dari old data ataupun nilai default sama dengan value dari input tersebut. -->
                </div>
                <input type="submit" value="Simpan" class="btn btn-success mt-3" style="width:80px;">
                <a href="{{ route('siswa') }}" class="btn btn-secondary mt-3" style="width:80px;">Back</a>
            </form>

Penjelasan ada dikodingan sebagai komen


5. Langkah kelima

buka file Siswa Controller.php dan tambahkan function update. Untuk kodingannya bisa dilihat di bawah ini

public function update(Request $request, $id) {
        
        $rule = [
            'nama_lengkap' => 'required|string',
            'jenis_kelamin' => 'required',
            'golongan_darah' => 'required',
        ];
        $this->validate($request$rule);

        $input = $request->all();
        unset($input['_token']);
        unset($input['_method']);

        $status = \DB::table('t_siswa')->where('id'$id)->update($input);

        if ($status) {
            return redirect('/data-siswa')->with('success','Data Berhasil Diupdate');
        } else {
            return redirect('/create-siswa')->with('error','Data Gagal Diupdate');
        }

    }

lalu tambahkan route baru untuk mengarahkan route siswa ke function update di controller

Route::patch('/data-siswa/{id}','SiswaController@update');


6. Hasil

Data sebelum di edit


Setelah kita tekan button editnya kita akan di arahkan ke halaman form dengan tampilan di bawah ini


kita edit data yang kita pilih, untuk contoh bisa dilihat di bawah ini


setelah di edit kita simpan, jika berhasil maka akan muncul pesan success dan data berhasil di update, untuk contohnya bisa dilihat di bawah ini





B. Delete Data with DB Facade  

1. Langka pertama

buka file siswa.blade.php dan tambahkan form untuk detele data, kodingannya bisa dilihat di bawah ini

<table class="table table-bordered text-center" id="dataTable" border="1" cellspacing="0" cellpadding="10" width="100%">
                <thead>
                    <tr align="center" class="text-dark">
                        <th>No</th>
                        <th>Foto</th>
                        <th>NIS</th>
                        <th>Nama Lengkap</th>
                        <th>Jenis Kelamin</th>
                        <th>Golongan Darah</th>
                        <th>Action</th>
                    </tr>
                </thead>
                @foreach ($siswa as $row)
                <tr align="center">
                    <td>{{$loop->iteration}}</td>
                    <td width="60"><img src="/image/ava.png" width="90%"></td>
                    <td>{{$row->nis}}</td>
                    <td>{{$row->nama_lengkap}}</td>
                    <td width="120">{{$row->jenis_kelamin}}</td>
                    <td width="140">{{$row->golongan_darah}}</td>
                    <td width="230">
                        <div class="row">                        
                        <div class="col-6">
                            <a href="{{ url('/data-siswa/' . $row->id . '/edit') }}" class="btn btn-warning" style="width:100px;" ><i class="fas fa-edit mr-1"></i>Edit</a>
                        </div>
                        <div class="col-6">
                            <form action="{{ url('/data-siswa', $row->id) }}" method="POST">
                                @method('DELETE')
                                @csrf
                                <button type="submit" class="btn btn-danger"style="width:100px;" onclick="return confirm('Yakin akan menghapus data ini ?');">
                                    <i class="fas fa-trash-alt mr-1"></i>Delete
                                </button>
                            </form>
                        </div>                        
                        </div>
                    </td>
                </tr>
                @endforeach        
            </table>


2. Langkah kedua

buka file web.php dan tambahkan route baru untuk mengarahkan id siswa ke function destroy di SiswaController.php

Route::delete('/data-siswa/{id}','SiswaController@destroy');


3. Langkah ketiga

buka file SiswaController.php dan tambahkan function destroy, untuk kodingannya bisa dilihat di bawah ini

public function destroy(Request $request, $id) {
        $status = \DB::table('t_siswa')->where('id'$id)->delete();

        if ($status) {
            return redirect('/data-siswa')->with('success','Data Berhasil Dihapus');
        } else {
            return redirect('/create-siswa')->with('error','Data Gagal Dihapus');
        }
    }


4. Hasil 

jika langkah langkah di atas telah di ikuti dengan baik. maka saat kita buka halaman siswa akan ada dua aksi yaitu edit dan delete seperti gambar di bawah ini


saat kita mencoba delete maka akan muncul alert untuk meyakinkan apakah data akan di delete


jika kita klik ok maka data akan terhapus dan muncul pesan data bahwa data terlah terhapus, untuk contohnya bisa dilihat di bawah ini





C. Studi Kasus 

1. Jelaskan fungsi update dan destroy

Update
update pada laravel tentu saja berfungsi untuk mengubah data yang dipilih menjadi data yang baru. Data yang dipilih di edit menggunakan update maka data tersebut berubah sesuai data yang terbaru jadi data yang lama akan ter update.

Destroy
destory pada laravel  befungsi untuk menghapus data yang telah kita pilih, maka nantinya fungsi destory ini akan otomatis menghapus data yang kita pilih tadi di database.


2. Terapkan Edit dan Delete pada tabel t_kelas

disini saya akan langsung saja memberikan kodingan kodingannya agar lebih cepat dan efisien

a. file kelas.blade.php


<center>
    <div class="card mt-5 mb-5" style="width:80%;">
        <div class="card-header">
            <div class="row">
                <h2 style="margin-left:260px; margin-right:235px;" class="text-info">Daftar Profile Kelas di SMK Negeri 4 Bandung</h2>
                <a href="{{ url('create-kelas') }}"><i class="fas fa-plus-square fa-2x mt-2"></i></a>
            </div>
        </div>
        <div class="card-body">
        @if(session('success'))
            <div class="alert alert-success">
                <i class="far fa-check-circle"></i>
                {{ session('success') }}
            </div>
        @endif
        @if(session('error'))
            <div class="alert alert-error">
                <i class="far fa-times-circle"></i>
                {{ session('error') }} 
            </div>
        @endif
            <div class="table-responsive">
                <table class="table table-bordered text-center" id="dataTable" border="1" cellspacing="0" cellpadding="10" width="100%">
                    <thead>
                        <tr class="text-dark">
                            <th>No</th>
                            <th>Nama Kelas</th> 
                            <th>Jurusan</th>
                            <th>Lokasi Lab Jurusan</th>
                            <th>Wali Kelas</th>
                            <th>Action</th>
                        </tr>
                    </thead>
                    @foreach ($kelas as $row) 
                    <tr>
                        <td>{{$loop->iteration}}</td>                        
                        <td>{{$row->nama_kelas}}</td>
                        <td>{{$row->jurusan}}</td>
                        <td>{{$row->lokasi_lab}}</td>
                        <td>{{$row->nama_wali_kelas}}</td>
                        <td width="230">
                            <div class="row">                        
                            <div class="col-6">
                                <a href="{{ url('/data-kelas/' . $row->id . '/edit') }}" class="btn btn-warning" style="width:100px;" ><i class="fas fa-edit mr-1"></i>Edit</a>
                            </div>
                            <div class="col-6">
                                <form action="{{ url('/data-kelas', $row->id) }}" method="POST">
                                    @method('DELETE')
                                    @csrf
                                    <button type="submit" class="btn btn-danger"style="width:100px;" onclick="return confirm('Yakin akan menghapus data ini ?');"><i class="fas fa-trash-alt mr-1"></i>Delete</button>
                                </form>
                            </div>                        
                            </div>
                        </td>
                    </tr>
                    @endforeach
                </table>
            </div>
        </div>
    </div>
</center>


b. file form-kelas.blade.php di dalam folder form

<div class="card" style="width:50%; margin:auto;">
        <div class="card-header">
            <h2 class="text-info">Tambah Data Siswa</h2>
        </div>
        <div class="card-body">
        @if(session('error'))
            <div class="alert alert-error">
                <i class="far fa-times-circle"></i>
                {{ session('error') }}
            </div>
        @endif

        @if (count($errors) > 0)
            <div class="alert alert-danger">                
                <strong><i class="fas fa-exclamation-triangle text-warning"></i>&nbsp;Perhatian</strong>
                <br> 
                <ul>
                    @foreach ($errors->all() as $error)
                    <li>{{ $error }}</li>
                    @endforeach
                </ul>
            </div>
        @endif
            <form action="{{ url('data-kelas', @$kelas->id) }}" method="POST">
                @csrf

                @if (!empty($kelas))
                    @method('PATCH')                    
                @endif

                <div class="form-group">
                    <label for="nama_kelas" class="text-dark">Nama Kelas</label>
                    <input type="text" class="form-control" id="nama_kelas" name="nama_kelas" value="{{ old('nama_kelas', @$kelas->nama_kelas) }}">
                </div>
                <div class="form-group">
                    <label for="jurusan" class="text-dark">Jurusan</label>
                    <input type="text" class="form-control" id="jurusan" name="jurusan" value="{{ old('jurusan', @$kelas->jurusan) }}">
                </div>
                <div class="form-group">
                    <label for="lokasi_lab" class="text-dark">Lokasi Lab</label>
                    <input type="text" class="form-control" id="lokasi_lab" name="lokasi_lab" value="{{ old('lokasi_lab', @$kelas->lokasi_lab) }}">
                </div>
                <div class="form-group">
                    <label for="nama_wali_kelas" class="text-dark">Nama Wali Kelas</label>
                    <input type="text" class="form-control" id="nama_wali_kelas" name="nama_wali_kelas" value="{{ old('nama_wali_kelas', @$kelas->nama_wali_kelas) }}">
                </div>
                <input type="submit" value="Simpan" class="btn btn-success mt-3" style="width:80px;">
                <a href="{{ route('kelas') }}" class="btn btn-secondary mt-3" style="width:80px;">Back</a>
            </form>
        </div>
    </div>


c. file KelasController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class KelasController extends Controller
{
    public function index() {
        $data['kelas'] = \DB::table('t_kelas')->get();        
        return view('kelas',$data);
        // Studi kasus 3 Poin 1 dan 2
        // ->orderBy('lokasi_lab','DESC')
        // ->where('nama_wali_kelas','LIKE','b%')        
        // Studi kasus 3 Poin 3 dan 4
        // ->orderBy('nama_kelas','ASC')
        // ->where('jurusan','LIKE','%Audio%')
    }

    public function create() {
        return view('form.form-kelas');
    }

    public function store(Request $request) { 
        
        $rule = [
            'nama_kelas' => 'bail|required|string|unique:t_kelas,nama_kelas',
            'jurusan' => 'required|string',
            'lokasi_lab' => 'required|string',
            'nama_wali_kelas' => 'required|string',
        ];
        $this->validate($request$rule);
        
        $input = $request->all();
        unset($input['_token']);
        $status = \DB::table('t_kelas')->insert($input);

        if ($status) {
            return redirect('/data-kelas')->with('success','Data Berhasil Ditambahkan');
        } else {
            return redirect('/create-kelas')->with('error','Data Gagal Ditambahkan');
        }
    }

    public function edit(Request $request, $id) {

        $data['kelas'] = \DB::table('t_kelas')->find($id);
        return view ('form.form-kelas'$data);        

    }

    public function update(Request $request, $id) {
        
        $rule = [
            'jurusan' => 'required|string',
            'lokasi_lab' => 'required|string',
            'nama_wali_kelas' => 'required|string',
        ];
        $this->validate($request$rule);

        $input = $request->all();
        unset($input['_token']);
        unset($input['_method']);

        $status = \DB::table('t_kelas')->where('id'$id)->update($input);

        if ($status) {
            return redirect('/data-kelas')->with('success','Data Berhasil Diupdate');
        } else {
            return redirect('/create-kelas')->with('error','Data Gagal Diupdate');
        }

    }

    public function destroy(Request $request, $id) {
        $status = \DB::table('t_kelas')->where('id'$id)->delete();

        if ($status) {
            return redirect('/data-kelas')->with('success','Data Berhasil Dihapus');
        } else {
            return redirect('/create-kelas')->with('error','Data Gagal Dihapus');
        }
    }
}


d. tambahkan routes di bawah ini ke dalam file web.php

Route::get('/data-kelas','KelasController@index')->name('kelas');
Route::get('/create-kelas','KelasController@create')->name('create-kelas');
Route::post('/data-kelas','KelasController@store');
Route::get('/data-kelas/{id}/edit','KelasController@edit');
Route::patch('/data-kelas/{id}','KelasController@update');
Route::delete('/data-kelas/{id}','KelasController@destroy');


Hasil

EDIT

1. data sebelum di edit


2. data setelah di edit


3. ketika di simpan maka akan muncul pesan  success dan data akan berubah




DELETE

1. ketika kita tekan button delete maka akan muncul alert untuk validasi dan jika kita klik ok maka akan muncul pesan success dan datapun akan terhapus






Sekian materi yang dapat saya berikan semoga bermanfaat untuk teman teman semua, mohon  maaf jika ada kesahalan wassalamualaiku wr wb

1 Comments