Laravel Tutorial Simple CRUD

Laravel Tutorial Simple CRUD

Sobatcoding.com - Laravel Tutorial Simple CRUD Laravel 8

Setelah pada artikel sebelumnya kita belajar pembuatan routing di Laravel 8 dan pagination, selanjutnya pada artikel kali ini kita akan membahas tentang tutorial simple crud di laravel 8. Kita bisa menggunakan model Obat dan controller ObatController yang sebelumnya kita pernah buat. Langsung saja kita ikuti langkah-langkahnya.

Kita buka kembali atau buat dahulu controller ObatController.php, dan masukkan kode seperti berikut

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Models\Obat;

class ObatController extends Controller
{
    public function index(Request $request)
    {
        $data = Obat::orderBy('nama_obat');
        if( $like = $request->get('search') )
        {
            $data->where('nama_obat', 'like', '%'.$like.'%');
        }
        $data = $data->paginate(8);

        return view('obat.index', compact('data'));
    }

    public function show($obat)
    {
        $data = Obat::findOrFail($obat);
        return response()->json($data);
    }

    public function create(Request $request)
    {
        return view('obat.form');
    }

    public function edit($customer, Request $request)
    {
        $data = Obat::findOrFail($customer);
        return view('obat.form', compact('data'));
    }

    public function store(Request $request)
    {

        $request->validate([
            'kode_obat' => 'required|unique:obat',
            'nama_obat' => 'required',
            'harga_beli' => 'required',
            'harga_jual' => 'required',
            'min_stok' => 'required',
            'stok' => 'required',
        ],
        [
            'required'  => ':attribute harus diisi',
        ]);

        $insert = new Obat;
        $insert->kode_obat = $request->get('kode_obat');
        $insert->nama_obat = $request->get('nama_obat');
        $insert->harga_beli = $request->get('harga_beli');
        $insert->harga_jual = $request->get('harga_jual');
        $insert->min_stok = $request->get('min_stok');
        $insert->stok = $request->get('stok');
        $insert->save();

        return redirect()->route('obat.index')->with('success','Data obat berhasil ditambahkan');
    }

    public function update($obat, Request $request)
    {
        
        $request->validate([
            'kode_obat' => 'required|unique:obat,kode_obat,'.$obat.'',
            'nama_obat' => 'required',
            'harga_beli' => 'required',
            'harga_jual' => 'required',
            'min_stok' => 'required',
            'stok' => 'required',
        ],
        [
            'required'  => ':attribute harus diisi',
        ]);

        $update = Obat::findOrFail($obat);
        $update->kode_obat = $request->get('kode_obat');
        $update->nama_obat = $request->get('nama_obat');
        $update->harga_beli = $request->get('harga_beli');
        $update->harga_jual = $request->get('harga_jual');
        $update->min_stok = $request->get('min_stok');
        $update->stok = $request->get('stok');
        $update->save();

        return redirect()->route('obat.index')->with('success','Data obat berhasil diupdate');
        
    }

    public function destroy($obat, Request $request)
    {
        Obat::where('id', $obat)->delete();

        return redirect()->route('obat.index')->with('success','Data obat berhasil dihapus');
    }
}

 

Buka file web.php dan tambahkan route baru

Route::resource('obat', ObatController::class);

 

Buat layout atau view index.blade.php untuk menampilkan data obat

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Data Obat</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    </head>
    <body>
        <div class="container">
            <h1>Data Obat</h1>
            
            <form> 
                <div class="row mb-2">
                    <div class="col">
                        <a href="{{ route('obat.create') }}" class="btn btn-primary mb-2">Tambah Data</a>
                    </div>
                    <div class="col-auto ms-auto">
                        <input type="text" name="search" class="form-control" autocomplete="off" placeholder="Masukkan keyword ..." value="{{ request()->get('search') ?? '' }}"/>
                    </div>
                </div>
            </form>
            <div class="card">
                <div class="card-body">
                    @if ($message = Session::get('success'))
                        <div class="alert alert-success">
                            <p>{{ $message }}</p>
                        </div>
                    @endif
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>NO</th>
                                <th>KODE OBAT</th>
                                <th>NAMA OBAT</th>
                                <th class="text-end">HARGA BELI</th>
                                <th class="text-end">HARGA JUAL</th>
                                <th class="text-center">MIN STOK</th>
                                <th class="text-center">STOK</th>
                                <th></th>
                            </tr>
                        </thead>
                        <tbody>
                        @foreach($data as $k=>$v)
                            <tr>
                                <td>{{ $k+1 }}</td>
                                <td>{{ $v->kode_obat }}</td>
                                <td>{{ $v->nama_obat }}</td>
                                <td class="text-end">{{ number_format($v->harga_beli, 2, ",", ".") }}</td>
                                <td class="text-end">{{ number_format($v->harga_jual, 2, ",", ".") }}</td>
                                <td class="text-center">{{ number_format($v->min_stok, 2, ",", ".") }}</td>
                                <td class="text-center">{{ number_format($v->stok, 2, ",", ".") }}</td>
                                <td>
                                    <form action="{{ route('obat.destroy',$v->id) }}" method="POST">
                                        <a class="btn btn-primary" href="{{ route('obat.edit', $v->id) }}">Edit</a>
                                        @csrf
                                        @method('DELETE')
                                        <button type="submit" class="btn btn-danger">Delete</button>
                                    </form>
                                
                                </td>
                            </tr>
                        @endforeach
                        </tbody>
                    </table>

                    <div>
                        {{ $data->appends(request()->except('page'))->links() }}
                    </div>
                </div>
            </div>
        
        </div>

        <script src="https://code.jquery.com/jquery-3.6.4.min.js" integrity="sha256-oP6HI9z1XaZNBrJURtCoUT5SUnxFr8s3BzRl+cbzUq8=" crossorigin="anonymous"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.19.5/jquery.validate.min.js" integrity="sha512-rstIgDs0xPgmG6RX1Aba4KV5cWJbAMcvRCVmglpam9SoHZiUCyQVDdH2LPlxoHtrv17XWblE/V/PP+Tr04hbtA==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script>
    </body>
</html>

 

Buat layout atau view form.blade.php untuk create atau update data obat

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Data Obat</title>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">

    </head>
    <body>
        <div class="container">
            <div class="card">
                <div class="card-header">{{ isset($data) ? 'Edit' : 'Tambah' }} Obat</div>
                    <div class="card-body">
                        <form id="formObat" method="POST" action="{{ isset($data) ? route('obat.update', ['customer' => $data->id]) : route('obat.store') }}">
                            @csrf
                            <div class="row">
                                <div class="col">
                                    <div class="mb-2">
                                        <label class="form-label">Kode Obat</label>
                                        <input type="text" class="form-control" name="kode_obat" autocomplete="off" value="{{ $data->kode_obat ?? old('kode_obat') }}" >
                                        @error('kode_obat')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <label class="form-label">Nama</label>
                                        <input type="text" class="form-control" name="nama_obat" autocomplete="off" value="{{ $data->nama_obat ?? old('nama_obat') }}" >
                                        @error('nama_obat')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <label class="form-label">Harga Beli</label>
                                        <input type="text" class="form-control" name="harga_beli" autocomplete="off" value="{{ $data->harga_beli ?? old('harga_beli') }}" >
                                        @error('harga_beli')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <label class="form-label">Harga Jual</label>
                                        <input type="text" class="form-control" name="harga_jual" autocomplete="off" value="{{ $data->harga_jual ?? old('harga_jual') }}" >
                                        @error('harga_jual')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <label class="form-label">Min Stok</label>
                                        <input type="text" class="form-control" name="min_stok" autocomplete="off" value="{{ $data->min_stok ?? old('min_stok') }}" >
                                        @error('min_stok')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <label class="form-label">Stok</label>
                                        <input type="text" class="form-control" name="stok" autocomplete="off" value="{{ $data->stok ?? old('stok') }}" >
                                        @error('stok')
                                            <p class="text-danger">{{ $message }}</p>
                                        @enderror
                                    </div>
                                    <div class="mb-2">
                                        <a href="{{ route('obat.index') }}"class="btn btn-default btn-link">Kembali</a>
                                        <button type="submit" class="btn btn-primary">SIMPAN</button>
                                    </div>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        

    </body>
</html>

 

Selamat mencoba.

Sekian tutorial kali ini. Semoga bermanfaat.

Jika teman-teman memiliki pertanyaan atau saran mengenai artikel ini, jangan ragu untuk meninggalkan komentar pada form di bawah