Halo teman-teman semuanya, pada ksempatan kali ini kita semua akan belajar bagaimana cara melakukan proses insert data ke dalam database di Laravel 9. Kita juga akan belajar melakukan proses upload gambar di dalam Laravel 9.
Langkah 1 - Menambahkan Method Create
dan Store
Karena sebelumnya kita sudah membuat controller, maka sekarang kita tinggal menambahkan 2 method baru untuk proses insert data. Yaitu create
yang digunakan untuk menampilkan halaman / form dan store
untuk memproses data yang dikirimkan.
Silahkan buka file app/Http/Controllers/PostController.php
, kemudian ubah kode-nya menjadi seperti berikut ini :
<?php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
/**
* index
*
* @return void
*/
public function index()
{
//get posts
$posts = Post::latest()->paginate(5);
//render view with posts
return view('posts.index', compact('posts'));
}
/**
* create
*
* @return void
*/
public function create()
{
return view('posts.create');
}
/**
* store
*
* @param Request $request
* @return void
*/
public function store(Request $request)
{
//validate form
$this->validate($request, [
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'title' => 'required|min:5',
'content' => 'required|min:10'
]);
//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());
//create post
Post::create([
'image' => $image->hashName(),
'title' => $request->title,
'content' => $request->content
]);
//redirect to index
return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Disimpan!']);
}
}
Dari perubahan kode di atas, kita menambahkan 2 method baru. Yaitu create
dan store
.
Untuk method create
akan kita gunakan untuk menampilkan halaman form yaang nantinya kita gunakan untuk melakukan input data. Disini kita return ke dalam sebuah view yang bernama create.blade.php
yang berada di dalam folder resources/views/posts
.
return view('posts.create');
Dan method store
kita gunakan untuk memproses data yang akan disimpan ke dalam database. Sebelum itu, kita akan buat sebuah validasi terlebih dahulu. Validasi ini digunakan untuk memeriksa apakah data yang akan disimpan sudah sesuai dengan yang diharapkan.
//validate form
$this->validate($request, [
'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg|max:2048',
'title' => 'required|min:5',
'content' => 'required|min:10'
]);
Dari validasi di atas, kita membuat beberapa rule atau aturan. Kurang lebih seperti berikut ini :
KEY |
VALIDATION |
KETERANGAN |
image |
required |
field wajib diisi. |
|
image |
field harus berupa gambar |
|
mimes:jpeg,png,jpg,gif,svg |
filed harus memiliki extensi jpeg , png , jpg , gif dan svg . |
|
max:2048 |
field maksimal berukuran 2048 Mb / 2Mb. |
title |
required |
field wajib diisi. |
|
min:5 |
field minimal memiliki 5 karakter/huruf. |
content |
required |
field wajib diisi. |
|
min:10 |
field minimal memiliki 10 karakter/huruf. |
Jika data yang dikirimkan sudah sesuai dengan validasi di atas, maka pertama kita akan melakukan proses upload gambar terlebih dahulu.
//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());
Di atas, kita buat variable baru dengan nama $image
yang berisi request yang bernama image
. Kemudian kita upload gambar tersebut dengan method storeAs
ke dalam folder storage/app/public/posts
. Dan kita akan random nama gambarnya menggunakan method hashName
.
Setelah gambar berhasil diupload, selanjutnya kita insert data baru ke dalam table posts menggunakan Eloquent.
//create post
Post::create([
'image' => $image->hashName(),
'title' => $request->title,
'content' => $request->content
]);
Setelah itu, kita redirect ke dalam route yang bernama posts.index
dengan memberikan pesan Data Berhasil Disimpan!
.
//redirect to index
return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Disimpan!']);
Langkah 2 - Membuat Halaman View / Form Create
Kita lanjutkan untuk membuat view untuk menampilkan halaman tambah data post. Silahkan buat file baru dengan nama create.blade.php
di dalam folder resources/views/posts
, kemudian masukkan kode berikut ini di dalamnya.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Tambah Data Post - SantriKoding.com</title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css">
</head>
<body style="background: lightgray">
<div class="container mt-5 mb-5">
<div class="row">
<div class="col-md-12">
<div class="card border-0 shadow rounded">
<div class="card-body">
<form action="{{ route('posts.store') }}" method="POST" enctype="multipart/form-data">
@csrf
<div class="form-group">
<label class="font-weight-bold">GAMBAR</label>
<input type="file" class="form-control @error('image') is-invalid @enderror" name="image">
<!-- error message untuk title -->
@error('image')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
<div class="form-group">
<label class="font-weight-bold">JUDUL</label>
<input type="text" class="form-control @error('title') is-invalid @enderror" name="title" value="{{ old('title') }}" placeholder="Masukkan Judul Post">
<!-- error message untuk title -->
@error('title')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
<div class="form-group">
<label class="font-weight-bold">KONTEN</label>
<textarea class="form-control @error('content') is-invalid @enderror" name="content" rows="5" placeholder="Masukkan Konten Post">{{ old('content') }}</textarea>
<!-- error message untuk content -->
@error('content')
<div class="alert alert-danger mt-2">
{{ $message }}
</div>
@enderror
</div>
<button type="submit" class="btn btn-md btn-primary">SIMPAN</button>
<button type="reset" class="btn btn-md btn-warning">RESET</button>
</form>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js"></script>
<script src="https://cdn.ckeditor.com/4.13.1/standard/ckeditor.js"></script>
<script>
CKEDITOR.replace( 'content' );
</script>
</body>
</html>
Jika kita perhatikan kode di atas, pada bagian form action, kita arahkan ke dalam route yang bernama posts.store
dengan method POST
.
<form action="{{ route('posts.store') }}" method="POST" enctype="multipart/form-data">
Dan kita juga menambahkan attribute enctype="multipart/form-data"
, yang bertujuan agar form ini dapat mengirimkaan sebuah file/gambar ke dalam server.
Dan untuk content, kita akan menggunakan library tambahan yaitu CKEDITOR
, dengan tujuan agar penulisan konten-nya lebih baik dan bagus.
<script src="https://cdn.ckeditor.com/4.13.1/standard/ckeditor.js"></script>
<script>
CKEDITOR.replace( 'content' );
</script>
Langkah 3 - Uji Coba Insert Data Post
Sekarang kita akan lakukan proses insert data post baru. Silahkan klik button TAMBAH POST
atau bisa ke URL http://localhost:8000/posts/create, jika berhasil, maka akan menampilkan halaman seperti berikut ini :
Silahkan klik button SIMPAN
tanpa mengisi data apapun, maka akan menampilkan validasi yang dikirimkan oleh controller. Kurang lebih seperti berikut ini :
Dan sekarang, silahkan masukkan data yang diinginkan, kemudian klik button SIMPAN
. Jika berhasil maka akan mendapatkan hasil seperti berikut ini :
Sampai disini pembahasan bagaimana cara melakukan proses insert data di Laravel 9. Di artikel selanjutnya kita akan belajar bagaimana cara membuat proses edit dan update data ke dalam database di Laravel 9.
Terima Kasih