PWPB | Laravel [ Edit Delete Data With DB FACADE ]
 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> 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
kimochi
ReplyDelete