Edit Data Hotel Laravel 11

Dari Dokumentasi Robie
Loncat ke navigasi Loncat ke pencarian

Tambahkan tombol Edit dan Delete

pada file hotel-list.blade.php pada folder resource/view/livewire/hotels

Gagal membuat miniatur: Berkas tak ditemukan

Tambahkan tujuan a href seperti berikut

Gagal membuat miniatur: Berkas tak ditemukan

Buat Komponen Edit Hotel

cara membuat komponen edit dengan mengetikkan

php artisan make:livewire hotels.hotel-edit lalu tekan enter, hasilnya akan muncul tampilan seperti berikut

Gagal membuat miniatur: Berkas tak ditemukan

Arahkan Routing

tambahkan routing di folder routes/web.php

Gagal membuat miniatur: Berkas tak ditemukan

Ubah file hotel-edit.blade.php

pada folder resources/views/livewire/hotels/hotel-edit.blade.php pada dasarnya isi halamannya sama dengan file hotel-create.blade.php, kita langsung copy paste saja dari fiel hote-create.blade.php. Kemudian ganti title sesuai halaman edit hotel.

Memasukkan isi data ke form edit

untuk menangkap id dari file yang di klik tombol edit, kita perlu menambahkan kode pada file app/Livewire/Hotels/HotelEdit.php dengan menambahkan

public function mount($id)

setelah id ditangkap, lalu konekkan dengan database dengan id yang sudah tertangkap dengan mengetikkan kode berikut

tambahkan library

use App\Models\Hotel;


public function mount($id){

$hotel = Hotel::find($id);

}


setelah itu, copy semua property/variabel dari HotelCreate.php ke diatas function mount

#[Validate('required',message:'Nama harus diisi')]

#[Validate('min:3',message:'Nama Minimal 3 Karakter')]

public $name;

public $phone;

public $email;

public $address;

public $stars;

public $check_in_time;

public $check_out_time;


sehingga kode program secara keseluruhan menjadi

Gagal membuat miniatur: Berkas tak ditemukan

kemudian tuliskan semua properties/variabel ke dalam function mount agar data muncul pada setiap form isian di edit hotel.


$hotel = Hotel::find($id);

$this->name = $hotel->name;

$this->phone = $hotel->phone;

$this->email = $hotel->email;

$this->address = $hotel->address;

$this->stars = $hotel->stars;

$this->check_in_time = $hotel->check_in_time;

$this->check_out_time = $hotel->check_out_time;

sehingga semua kode menjadi seperti berikut

Gagal membuat miniatur: Berkas tak ditemukan

Ubah form action file hotel-edit.blade.php

ubah bagian form action menjadi seperti ini


<form wire:submit.prevent='update'>

karena kita menggunakan update, berarti kita juga harus membuat public function update pada file HotelEdit.php

Modifikasi Class HotelEdit.php

pada file app/Livewire/Hotels/HotelEdit.php kita buat function update


public function update(){

        $this->validate;karena ada fungsi validasi kita juga harus tambahkan script ini, supaya validasinya berjalan

}

untuk update, kita juga harus dapatkan semua record (semua data) yang bisa diakses di function update, nah sementara id yang ditangkap hanya bisa dibaca pada function mount. maka dari itu kita buat public properties baru dengan nama public $hotel; diluar function yang sudah dibuat. kemudian ubah bagian $hotel = Hotel::find($id); menjadi $this->hotel = Hotel::find($id); agar semua record hotel bisa disimpan di dalam public $hotel; lalu pada bagian kode berikut juga harus kita tambahkan $this-> pada function mount

$this->name = $hotel->name;

$this->phone = $hotel->phone;

$this->email = $hotel->email;

$this->address = $hotel->address;

$this->stars = $hotel->stars;

$this->check_in_time = $hotel->check_in_time;

$this->check_out_time = $hotel->check_out_time;


sehingga kode akhir menjadi


$this->name = $this->hotel->name;

$this->phone = $this->hotel->phone;

$this->email = $this->hotel->email;

$this->address = $this->hotel->address;

$this->stars = $this->hotel->stars;

$this->check_in_time = $this->hotel->check_in_time;

$this->check_out_time = $this->hotel->check_out_time;


dan untuk menyimpan data yang telah diubah kita perlu menambahkan script pada function update berikut

$this->hotel->update();

sehingga kode function update secara keseluruhan menjadi seperti berikut

public function update(){

        $this->validate();

        $this->hotel->update($this->all());(untuk menyimpan hasil editan)

        return $this->redirect('/hotels',navigate:true); (untuk meredirect jika data sudah tersimpan di database)

    }