Tutorial CRUD Laravel Bagian 3 (Update)



Halo kawan-kawan semua. kita lanjutkan lagi tutorial crud kita dengan eloquent laravel. tutorial crud kita ini dilengkapi dengan upload file. oke langsung saja.

#Update
adalah cara mengubah/memperbaiki data yang ada pada database. baik langsung saja kita mulai membuat updata data. kita ikuti step berikut.

  1. Buat link untuk di arahkan ke sebuah route
  2. Route
  3. Controller
  4. edit atau persiapkan model (opsional)
  5. passing data dari model (opsional)
  6. view
1. buat link (siswa\siswa_index.blade.php)
kita buat link dari tombol edit yang ada di view siswa\siswa_index.blade.php

<a href="{{url('editsiswa').'/'.$row->id}}" class="btn btn-success btn-sm">Edit</a>

2. Route (routes/web.php)
setelah link dibuat, kita tangkap link tadi di route. routes/web.php

Route::get('/editsiswa/{id}', 'SiswaController@editsiswa');
di controller kita dapat menangkap id dari parameter fungsi editsiswa pada SiswaController.

3. Controller (app\http\controllers\SiswaControllers.php)
kita tambahkan fungsi editsiswa.

public function editsiswa($id){
        $siswa=new Siswa;
        $data=$siswa::find($id);
        return view('siswa.edit_siswa',['siswa' => $data]);
    }

$siswa::find($id); adalah eloquent untuk mencari data berdasarkan primary key. data berupa array tersebut di passing ke view.

4. Buat View (resources\views\siswa\edit_siswa.blade.php)

@extends('master_tabel')
@section('breadcrumb')
<section class="content-header">
      <div class="container-fluid">
        <div class="row mb-2">
          <div class="col-sm-6">
            <h1>Siswa</h1>
          </div>
          <div class="col-sm-6">
            <ol class="breadcrumb float-sm-right">
              <li class="breadcrumb-item"><a href="#">Home</a></li>
              <li class="breadcrumb-item active">Siswa</li>
            </ol>
          </div>
        </div>
      </div><!-- /.container-fluid -->
</section>
@endsection
@section('content')
<section class="content">
      <div class="container-fluid">
        <!-- SELECT2 EXAMPLE -->
        <div class="col-md-12">
            <div class="card card-dark">
              <div class="card-header">
                <h3 class="card-title">FORM TAMBAH SISWA</h3>
              </div>
              <!-- /.card-header -->
              <!-- form start -->
              <form class="form-horizontal" action="{{url('aksi_editsiswa')}}" method="POST" enctype="multipart/form-data">
                {{csrf_field()}}
                <div class="card-body">
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">NIS
                    @error('nis')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">
                      <input type="number" name="nis" class="form-control" placeholder="Nomor Induk Siswa" value="{{old('nis', $siswa->nis)}}">
                      <input type="hidden" name="id" value="{{$siswa->id}}">
                    </div>
                  </div>
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">NAMA 
                    @error('nama')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">
                      <input name="nama" type="text" class="form-control"  placeholder="Nama" value="{{old('nama', $siswa->nama)}}">
                    </div>
                  </div>
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">JENIS KELAMIN 
                    @error('jenis_kelamin')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">
                      <select name="jenis_kelamin" class="form-control">
                        <option value="">-Pilih-</option>
                        <option @if(old('jenis_kelamin')=='Laki-Laki' or $siswa->jenis_kelamin=='Laki-Laki') selected @endif value="Laki-Laki">Laki-Laki</option>
                        <option @if(old('jenis_kelamin')=='Perempuan' or $siswa->jenis_kelamin=='Perempuan') selected @endif value="Perempuan">Perempuan</option>
                      </select>
                    </div>
                  </div>
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">AGAMA 
                    @error('agama')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">
                      <select name="agama" class="form-control">
                        <option value="">-Pilih-</option>
                        <option @if(old('agama')=='Islam' or $siswa->agama=='Islam') selected @endif value="Islam">ISLAM</option>
                        <option @if(old('agama')=='Kristen' or $siswa->agama=='Kristen') selected @endif value="Kristen">KRISTEN</option>
                        <option @if(old('agama')=='Katolik' or $siswa->agama=='Katolik') selected @endif value="Katolik">KATOLIK</option>
                        <option @if(old('agama')=='Budha' or $siswa->agama=='Budha') selected @endif value="Budha">BUDHA</option>
                        <option @if(old('agama')=='Hindu' or $siswa->agama=='Hindu') selected @endif value="Hindu">HINDU</option>
                      </select>
                    </div>
                  </div>
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">ALAMAT 
                    @error('alamat')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">
                      <textarea name="alamat" class="form-control">{{old('alamat', $siswa->alamat)}}</textarea>
                    </div>
                  </div>
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">Ganti Foto</label>
                    <div class="col-sm-10">
                      <input type="file" name="file" class="form-control" lang="id">
                    </div>
                  </div> 
                  <div class="form-group row">
                    <label class="col-sm-2 col-form-label">Foto
                    @error('file')
                        <div class="text-danger">{{ $message }}</div>
                    @enderror
                    </label>
                    <div class="col-sm-10">                           
                      <img src="/foto_siswa/{{$siswa->file}}" width="100px" height="100px">                
                    </div>
                  </div>                                
                </div>
                <!-- /.card-body -->
                <div class="card-footer">
                  <button type="submit" class="btn btn-info">UBAH</button>
                  <button type="submit" class="btn btn-default float-right">Cancel</button>
                </div>
                <!-- /.card-footer -->
              </form>
            </div>
            
        </div>
        <!-- /.card -->
      </div><!-- /.container-fluid -->
    </section>
@endsection

value="{{old('nama', $siswa->nama)}}"
old('nama') adalah nilai inputan yang dipertahankan ketika ada bagian lain yang tidak valid.
$siswa->nama data yang di passing ke view tadi.

Proses pertama untuk update selesai. step nya berulang lagi.

  1. Buat link untuk di arahkan ke sebuah route
  2. Route
  3. Controller
    • edit atau persiapkan model (opsional)
    • passing data dari model (opsional)
  4. View
1. Buat Link
untuk link kita buat dari action form edit_siswa.blade.php.

action="{{url('aksi_editsiswa')}"

2. Route (routes/web.php)
setelah link dibuat, kita tangkap link tadi di controller. routes/web.php

Route::post('/aksi_editsiswa', 'SiswaController@aksi_editsiswa');

3. Controller (app\http\controllers\SiswaControllers.php)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Siswa;
use File;

class SiswaController extends Controller
{
    public function index(){
    $siswa=Siswa::all();
    return view('siswa.siswa_index',['siswa' => $siswa]);
    }

    public function tambahsiswa(){
    return view('siswa.tambah_siswa');
    }

    public function aksi_tambahsiswa(Request $request){   
    //validasi
    $request->validate([
    'file' => 'required|file|image|mimes:jpeg,png,jpg|max:2048',
    'nis' => ['required', 'unique:table_siswa', 'max:15'],
    'nama' => ['required'],
    'jenis_kelamin' => ['required'],
    'agama' => ['required'],
    'alamat' => ['required'],
]);

    //mengupload file
    $file = $request->file('file');
    $nama_file = $file->getClientOriginalName();
    $destinationPath = 'foto_siswa';   
      $file->move($destinationPath,$file->getClientOriginalName());

      //mengubah nama file
    $request = new Request($request->all());
    $request->merge([
    'file' => $nama_file,
]);

    //membuat objek $siswa
    $siswa=new Siswa;
    //menambah ke database
    $siswa::create($request->all());
    return redirect('/siswa');
   

    }

    public function editsiswa($id){
        $siswa=new Siswa;
        $data=$siswa::find($id);
        return view('siswa.edit_siswa',['siswa' => $data]);
    }

    public function aksi_editsiswa(Request $request){         
            if (!isset($request->file)) {//file tidak diubah
                //validasi
                $request->validate([
                'nis' => ['required', 'max:15'],
                'nama' => ['required'],
                'jenis_kelamin' => ['required'],
                'agama' => ['required'],
                'alamat' => ['required'],
                ]);

                $siswa=new Siswa;
                $siswa::find($request->id)
                ->update($request->all());
                return redirect('/siswa');
            }else{//file diubah
                //validasi
                $request->validate([
                'nis' => ['required', 'max:15'],
                'nama' => ['required'],
                'jenis_kelamin' => ['required'],
                'agama' => ['required'],
                'alamat' => ['required'],
                ]);               


                //mengupload file
                $file = $request->file('file');
                $nama_file = $file->getClientOriginalName();
                $destinationPath = 'foto_siswa';          
                $file->move($destinationPath,$file->getClientOriginalName());

                //return $nama_file;
                //mengubah nama file baru
                $request = new Request($request->all());
                $request->merge([
                'file' => $nama_file,
                ]);

                 //membuat objek $siswa
                $siswa=new Siswa;

                //hapus file lama
                $data=$siswa::find($request->id);
                File::delete($destinationPath.'/'.$data->file);

                //megupdate database
                $siswa::find($request->id)
                ->update($request->all());
                
                return redirect('/siswa');
            }
            

    }

}


ada dua kondisi paling berpengaruh di update ini. yaitu ketika gambar atau file di ubah atau tidak. jika file tidak di ganti maka kondisi pertama dijalankan. jika file diganti maka file baru diupload dan file lama di hapus. berikut eloquent untuk update data.

//megupdate database
$siswa::find($request->id)
->update($request->all());


4. View
untuk view kita hanya menampilkan siswa_index.blade.php

return redirect('/siswa');


Terima kasih

Popular posts from this blog

Cara Menggunakan Template Admin LTE Sebagai Template Web Dinamis

Aplikasi CRUD menggunakan Template Admin LTE

Cara membuat Link ke Halaman lain dan Link ke bagian Halaman