Hai, kali ini kita akan belajar pembuatan CRUD di Laravel.
Kali ini kita akan membaginya menjadi beberapa bagian,
bagian 1 berisi Core code yang terdiri dari Controller, Model, dan View dengan tujuan agar kita bisa mengerti flownya. sedangkan pada bagian 2 kita akan menata View kurang lebih seperti dashboard table dengan Bootstrap 4.
1. Bagian 1 Core program
web.php
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Pegawai_c;
Route::get('/getAll', [Pegawai_c::class, 'getAll']);
Route::get('/get1data', [Pegawai_c::class, 'get1data']);
Route::get('/editData', [Pegawai_c::class, 'editData']);
Route::get('/deleteData', [Pegawai_c::class, 'deleteData']);
Route::get('/getDataPaggination', [Pegawai_c::class, 'getDataPaggination']);
Pegawai_c.php :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pegawai_m;
use Illuminate\Support\Facades\DB;
class Pegawai_c extends Controller
{
/*
protected $pegawaiModel;
public function __construct(Pegawai_m $pegawaiModel)
{
$this->pegawaiModel = $pegawaiModel;
}
*/
function getAll(){
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
//$data = $this->pegawaiModel->getAll();
//print_r($data);
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
$data = DB::table('pegawai')->get();
return view('pegawai/getAll', array (
'data' => $data
));
}
function getDataPaggination(){
$data = DB::table('pegawai')->paginate(10);
return view('pegawai/getAll', array (
'data' => $data
));
}
function get1data(){
//$pegawaiModel = new Pegawai_m();
$data = DB::table('pegawai')->first();
//print_r($data);
return view('pegawai/get1data', array (
'data' => $data
));
}
function editData(){
$update = DB::table('pegawai')
->where('pegawai_id', 2)
->update(['pegawai_nama' => 'sdjd']);
//echo $update;
}
function deleteData(){
$delete = DB::table('pegawai')
->where('pegawai_id', '=', 2)
->delete();
echo $delete;
}
}
Pegawai_m.php :
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\DB;
class Pegawai_m extends Model
{
function getAll(){
$pegawai = DB::table('pegawai')->get();
return $pegawai;
}
}
View (buat folder bernama pegawai, lalu buat file-file baru)
getAll.blade.php :
<ul>
@foreach($data as $pegawai)
<li>Nama: {{ $pegawai->pegawai_nama }}</li>
@endforeach
</ul>
get1data.blade.php :
{{ $data->pegawai_nama }}
Keterangan : Program di atas sudah berjalan dengan database bernama coba dengan table pegawai. dan kolom komentar sebenarnya berguna ya,
2. Crud dengan View Bootstrap
Setelah kita sudah berhasil membuat Core, kali ini kita akan mengintegrasikan core dengan view Bootstrap.
web.php (route):
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Pegawai_c;
Route::get('/getAll', [Pegawai_c::class, 'getAll']);
Route::get('/get1data', [Pegawai_c::class, 'get1data']);
Route::get('/editData', [Pegawai_c::class, 'editData']);
Route::get('/deleteData', [Pegawai_c::class, 'deleteData']);
Route::get('/getDataPaggination', [Pegawai_c::class, 'getDataPaggination']);
Route::match(['get', 'post'], '/pegawai', [Pegawai_c::class, 'pegawai']);
Route::match(['get', 'post'], '/input', [Pegawai_c::class, 'input']);
Route::match(['get', 'post'], '/edit/{id}', [Pegawai_c::class, 'edit']);
Route::match(['get', 'post'], '/delete/{id}', [Pegawai_c::class, 'delete']);
Pegawai_c.php (Controller) :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pegawai_m;
use Illuminate\Support\Facades\DB;
class Pegawai_c extends Controller
{
/*
protected $pegawaiModel;
public function __construct(Pegawai_m $pegawaiModel)
{
$this->pegawaiModel = $pegawaiModel;
}
*/
function getAll(){
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
//$data = $this->pegawaiModel->getAll();
//print_r($data);
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
$data = DB::table('pegawai')->get();
return view('pegawai/getAll', array (
'data' => $data
));
}
function getDataPaggination(){
$data = DB::table('pegawai')->paginate(10);
return view('pegawai/getAll', array (
'data' => $data
));
}
function get1data(){
//$pegawaiModel = new Pegawai_m();
$data = DB::table('pegawai')->first();
//print_r($data);
return view('pegawai/get1data', array (
'data' => $data
));
}
function editData(){
$update = DB::table('pegawai')
->where('pegawai_id', 2)
->update(['pegawai_nama' => 'sdjd']);
//echo $update;
}
function deleteData(){
$delete = DB::table('pegawai')
->where('pegawai_id', '=', 2)
->delete();
echo $delete;
}
function pegawai(Request $request){
$pencarian = $request->query('pencarian');
$page = $request->query('page');
$data = DB::table('pegawai')
->where('pegawai_nama', 'like', '%' . $pencarian . '%')
->orWhere('pegawai_jabatan', 'like', '%' . $pencarian . '%')
->paginate(10);
//$data = DB::table('pegawai')->paginate(10);
return view('pegawai/master', array(
'content' => view()->make('pegawai.content', array (
"data" => $data,
"pencarian" => $pencarian,
"page" => $page,
))->render()
));
}
function input(Request $request){
if ($request->isMethod('POST')) {
$pegawai_nama = $request->input('pegawai_nama');
$pegawai_jabatan = $request->input('pegawai_jabatan');
$insert = DB::table('pegawai')->insert(array(
"pegawai_nama" => $pegawai_nama,
"pegawai_jabatan" => $pegawai_jabatan,
));
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
return view('pegawai/master', array(
'content' => view()->make('pegawai.input')->render()
));
}
}
function edit(Request $request, $id){
if ($request->isMethod('POST')) {
$pegawai_nama = $request->input('pegawai_nama');
$pegawai_jabatan = $request->input('pegawai_jabatan');
$update = DB::table('pegawai')
->where('pegawai_id', $id)
->update(
['pegawai_nama' => $pegawai_nama],
['pegawai_jabatan' => $pegawai_jabatan],
);
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
//$id = $request->query('id');
//$id = $request->segment(1);
//echo $id;
$data = DB::table('pegawai')
->where('pegawai_id', $id)
->first();
//echo $data->pegawai_nama;
return view('pegawai/master', array(
'content' => view()->make('pegawai.edit', array (
"data" => $data,
"id" => $id,
))->render()
));
}
}
function delete(Request $request, $id){
if ($request->isMethod('POST')) {
$delete = DB::table('pegawai')->where('pegawai_id', $id)->delete();
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
//$id = $request->query('id');
//$id = $request->segment(1);
//echo $id;
$data = DB::table('pegawai')
->where('pegawai_id', $id)
->first();
//echo $data->pegawai_nama;
return view('pegawai/master', array(
'content' => view()->make('pegawai.delete', array (
"data" => $data,
"id" => $id,
))->render()
));
}
}
}
View, untuk view perhatikan struktur file ini :
master.blade.php :
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>CRUD Sederhana </title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body>
<br>
<div class="container">
<?php echo $content; ?>
</div>
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.5.4/dist/umd/popper.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
</body>
</html>
content.blade.php :
<h1 class="mt-5">Tabel Pegawai</h1>
<br>
<form class="form-inline" action="" method="GET">
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only">Pencarian</label>
<input value="{{ $pencarian }}" type="text" name="pencarian" class="form-control" id="inputPassword2" placeholder="Pencarian">
</div>
<button type="submit" class="btn btn-primary mb-2">Cari</button>
</form>
<br><br>
<a href="{{ url('/input') }}" class="btn btn-success">Input</a>
<br><br>
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Nama</th>
<th scope="col">Jabatan</th>
<th scope="col">Action</th>
</tr>
</thead>
<tbody>
<?php
$no = 1 ;
?>
@foreach($data as $pegawai)
<tr>
<th scope="row">{{ ($page * 10) - 10 + $no }}</th>
<td>{{ $pegawai->pegawai_nama }}</td>
<td>{{ $pegawai->pegawai_jabatan }}</td>
<td>
<a href="{{ url('/edit/'.$pegawai->pegawai_id); }}" class="btn btn-warning">Edit</a>
<a href="{{ url('/delete/'.$pegawai->pegawai_id); }}" class="btn btn-danger">Delete</a>
</td>
</tr>
<?php $no++; ?>
@endforeach
</tbody>
</table>
<nav aria-label="Page navigation">
<ul class="pagination">
{{ $data->links('pagination::bootstrap-4') }}
</ul>
</nav>
<br>
<nav aria-label="Page navigation">
<ul class="pagination">
{{-- Tombol "First" --}}
@if ($data->currentPage() > 1)
<li class="page-item">
<a class="page-link" href="{{ $data->url(1) }}" aria-label="First">
<span aria-hidden="true">«</span>
</a>
</li>
@endif
{{-- Nomor halaman --}}
{{ $data->onEachSide(1)->links('pagination::bootstrap-4') }}
{{-- Tombol "Last" --}}
@if ($data->currentPage() < $data->lastPage())
<li class="page-item">
<a class="page-link" href="{{ $data->url($data->lastPage()) }}" aria-label="Last">
<span aria-hidden="true">»</span>
</a>
</li>
@endif
</ul>
</nav>
delete.blade.php :
<br><br><br>
<form action="{{ url('/delete/'.$id); }}" method="POST">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="{{ $data->pegawai_nama }}" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="{{ $data->pegawai_jabatan }}" type="text" class="form-control" id="exampleInputPassword1">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
edit.blade.php :
<br><br><br>
<form action="{{ url('/edit/'.$id); }}" method="POST">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="{{ $data->pegawai_nama }}" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="{{ $data->pegawai_jabatan }}" type="text" class="form-control" id="exampleInputPassword1">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
input.blade.php :
<br><br><br>
<form action="{{ url('/input'); }}" method="POST">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="" type="text" class="form-control" id="exampleInputPassword1">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
Untuk seluruh fungsi CRUD, Pencarian dan Paggination sudah berjalan dengan baik ya gaes
3. Terdapat Upload Form Image
Kali ini kita melakukan beberapa perbaikan di part 2, dan menambahkan fitur untuk uplad image
pertama ketikkan perintah berikut :
php artisan storage:link
web.php :
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Pegawai_c;
Route::get('/getAll', [Pegawai_c::class, 'getAll']);
Route::get('/get1data', [Pegawai_c::class, 'get1data']);
Route::get('/editData', [Pegawai_c::class, 'editData']);
Route::get('/deleteData', [Pegawai_c::class, 'deleteData']);
Route::get('/getDataPaggination', [Pegawai_c::class, 'getDataPaggination']);
Route::match(['get', 'post'], '/pegawai', [Pegawai_c::class, 'pegawai']);
Route::match(['get', 'post'], '/input', [Pegawai_c::class, 'input']);
Route::match(['get', 'post'], '/edit/{id}', [Pegawai_c::class, 'edit']);
Route::match(['get', 'post'], '/delete/{id}', [Pegawai_c::class, 'delete']);
pegawai_c.php :
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Pegawai_m;
use Illuminate\Support\Facades\DB;
class Pegawai_c extends Controller
{
/*
protected $pegawaiModel;
public function __construct(Pegawai_m $pegawaiModel)
{
$this->pegawaiModel = $pegawaiModel;
}
*/
function getAll(){
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
//$data = $this->pegawaiModel->getAll();
//print_r($data);
//$pegawaiModel = new Pegawai_m();
//$data = $pegawaiModel->getAll();
$data = DB::table('pegawai')->get();
return view('pegawai/getAll', array (
'data' => $data
));
}
function getDataPaggination(){
$data = DB::table('pegawai')->paginate(10);
return view('pegawai/getAll', array (
'data' => $data
));
}
function get1data(){
//$pegawaiModel = new Pegawai_m();
$data = DB::table('pegawai')->first();
//print_r($data);
return view('pegawai/get1data', array (
'data' => $data
));
}
function editData(){
$update = DB::table('pegawai')
->where('pegawai_id', 2)
->update(['pegawai_nama' => 'sdjd']);
//echo $update;
}
function deleteData(){
$delete = DB::table('pegawai')
->where('pegawai_id', '=', 2)
->delete();
echo $delete;
}
function pegawai(Request $request){
$pencarian = $request->query('pencarian');
$page = $request->query('page');
$page = isset($page) ? $page : 1;
$data = DB::table('pegawai')
->where('pegawai_nama', 'like', '%' . $pencarian . '%')
->orWhere('pegawai_jabatan', 'like', '%' . $pencarian . '%')
->paginate(10);
//$data = DB::table('pegawai')->paginate(10);
return view('pegawai/master', array(
'content' => view()->make('pegawai.content', array (
"data" => $data,
"pencarian" => $pencarian,
"page" => $page,
))->render()
));
}
function input(Request $request){
if ($request->isMethod('POST')) {
$pegawai_nama = $request->input('pegawai_nama');
$pegawai_jabatan = $request->input('pegawai_jabatan');
$pegawai_jabatan = isset($pegawai_jabatan) ? $pegawai_jabatan : '';
$request->validate([
'pegawai_nama' => 'required|string|max:255',
]);
$request->validate([
'file' => 'nullable|file|max:10240',
]);
//$path = $request->file('file')->store('public');
if ($request->hasFile('file')) {
$path = $request->file('file')->store('public');
} else {
$path = '';
}
$insert = DB::table('pegawai')->insert(array(
"pegawai_nama" => $pegawai_nama,
"pegawai_jabatan" => $pegawai_jabatan,
"foto" => $path,
));
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
return view('pegawai/master', array(
'content' => view()->make('pegawai.input')->render()
));
}
}
function edit(Request $request, $id){
if ($request->isMethod('POST')) {
$pegawai_nama = $request->input('pegawai_nama');
$pegawai_jabatan = $request->input('pegawai_jabatan');
$pegawai_jabatan = isset($pegawai_jabatan) ? $pegawai_jabatan : '';
$request->validate([
'pegawai_nama' => 'required|string|max:255',
]);
$request->validate([
'file' => 'nullable|file|max:10240',
]);
//$path = $request->file('file')->store('public');
if ($request->hasFile('file')) {
$path = $request->file('file')->store('public');
$update = DB::table('pegawai')
->where('pegawai_id', $id)
->update([
'pegawai_nama' => $pegawai_nama,
'pegawai_jabatan' => $pegawai_jabatan,
'foto' => $path,
]);
} else {
$path = '';
$update = DB::table('pegawai')
->where('pegawai_id', $id)
->update([
'pegawai_nama' => $pegawai_nama,
'pegawai_jabatan' => $pegawai_jabatan,
]);
}
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
//$id = $request->query('id');
//$id = $request->segment(1);
//echo $id;
$data = DB::table('pegawai')
->where('pegawai_id', $id)
->first();
//echo $data->pegawai_nama;
return view('pegawai/master', array(
'content' => view()->make('pegawai.edit', array (
"data" => $data,
"id" => $id,
))->render()
));
}
}
function delete(Request $request, $id){
if ($request->isMethod('POST')) {
$delete = DB::table('pegawai')->where('pegawai_id', $id)->delete();
return redirect()->action([Pegawai_c::class, 'pegawai']);
}else{
//$id = $request->query('id');
//$id = $request->segment(1);
//echo $id;
$data = DB::table('pegawai')
->where('pegawai_id', $id)
->first();
return view('pegawai/master', array(
'content' => view()->make('pegawai.delete', array (
"data" => $data,
"id" => $id,
))->render()
));
}
}
}
input.blade.php :
<br><br><br>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<br><br><br>
<form action="{{ url('/input'); }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="" type="text" class="form-control" id="exampleInputPassword1">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Foto</label>
<input type="file" name="file" class="form-control">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
edit.blade.php :
<br><br><br>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<br><br><br>
<form action="{{ url('/edit/'.$id); }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="{{ $data->pegawai_nama }}" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="{{ $data->pegawai_jabatan }}" type="text" class="form-control" id="exampleInputPassword1">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Foto</label> <br>
<input type="file" name="file" class="form-control">
<img width="500px" src="{{ Storage::url($data->foto) }}" alt="Nama Gambar">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
delete.blade.php :
<br><br><br>
@if ($errors->any())
<div class="alert alert-danger">
<ul>
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
<br><br><br>
<form action="{{ url('/delete/'.$id); }}" method="POST">
@csrf
<div class="form-group">
<label for="exampleInputEmail1">Nama</label>
<input name="pegawai_nama" value="{{ $data->pegawai_nama }}" type="text" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Jabatan</label>
<input name="pegawai_jabatan" value="{{ $data->pegawai_jabatan }}" type="text" class="form-control" id="exampleInputPassword1">
</div>
<div class="form-group">
<label for="exampleInputPassword1">Foto</label> <br>
<img width="500px" src="{{ Storage::url($data->foto) }}" alt="Nama Gambar">
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
NB : Pastikan sudah mengatur permisision 777 di chmod dan chown ya