Tutorial Laravel 10 #5 : Insert Data ke Dalam Database


Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com
Tutorial Laravel 10 #5 : Insert Data ke Dalam Database

Halo teman-teman semuanya, pada artikel kali ini kita semua akan belajar bersama-sama bagaimana cara membuat proses insert data ke dalam database menggunakan Laravel 10. Tidak hanyak itu, kita juga akan belajar melakukan proses upload gambar di dalam Laravel dengan mudah.

Langkah 1 - Menambahkan Method Create dan Store

Tentu saja hal pertama yang harus kita lakukan adalah menambahkan 2 method di dalam controller, apa saja method tersebut? yaitu :

  • function create - method yang digunakan untuk menampilkan halaman form tambah data
  • function store - method yang digunakan untuk memproses data ke dalam database dan juga melakukan upload gambar.

Sekarang, silahkan teman-teman buka file app/Http/Controllers/PostController.php, kemudian ubah kode-nya menjadi seperti berikut ini.

app/Http/Controllers/PostController.php

<?php

namespace App\Http\Controllers;

//import Model "Post
use App\Models\Post;

//return type View
use Illuminate\View\View;

//return type redirectResponse
use Illuminate\Http\RedirectResponse;

use Illuminate\Http\Request;

class PostController extends Controller
{
    /**
     * index
     *
     * @return View
     */
    public function index(): View
    {
        //get posts
        $posts = Post::latest()->paginate(5);

        //render view with posts
        return view('posts.index', compact('posts'));
    }

    /**
     * create
     *
     * @return View
     */
    public function create(): View
    {
        return view('posts.create');
    }

    /**
     * store
     *
     * @param  mixed $request
     * @return RedirectResponse
     */
    public function store(Request $request): RedirectResponse
    {
        //validate form
        $this->validate($request, [
            'image'     => 'required|image|mimes:jpeg,jpg,png|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, pertama kita import return type redirectResponse.

//return type redirectResponse
use Illuminate\Http\RedirectResponse;

Kemudian kita menambahkan method baru yang bernama create.

public function create(): View
{

	//...
	
}

Di dalam method tersebut kita melakukan return dengan mengarahkan ke dalam sebuah view yang nanti akan kita buat, yaitu resources/views/posts/create.blade.php. Jika teman-teman cari file tersebut, maka tidak akan menemukannya, karena kita akan membuatnya nanti.

return view('posts.create');

Setelah itu, kita juga membuat method yang bernama store. Method ini akan kita gunakan untuk memproses data dan memasukkannya ke dalam database dan sekaligus membuat fungsi untuk melakukan upload gambar.

public function store(Request $request): RedirectResponse
{

	//...
	
}

Di dalam method tersebut, pertama-tama kita membuat validasi terlebih dahulu. Fungsinya untuk memastikan data yang dikirimkan sudah sesuai dengan yang diharapkan.

//validate form
$this->validate($request, [
    'image'     => 'required|image|mimes:jpeg,jpg,png|max:2048',
    'title'     => 'required|min:5',
    'content'   => 'required|min:10'
]);

Dari validasi di atas, kurang lebih penjelasannya seperti berikut ini.

KEY VALIDATION KETERANGAN
image required field wajib diisi.
image field harus berupa gambar
mimes:jpeg,jpg,png filed harus memiliki extensi jpeg, jpg dan png.
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 langkah selanjutnya adalah melakukan upload gambar.

//upload image
$image = $request->file('image');
$image->storeAs('public/posts', $image->hashName());

Di atas, kita membuat variable baru dengan nama $image dan berisi request dengan jenis file yang bernama image. Request tersebut merupakan file yang dikirim dari form.

Setelah itu, kita upload gambar tersebut menggunakan method storeAs bawaan dari Laravel dan kita akan menyimpannya ke dalam folder storage/app/public/posts dan nama dari file gambar tersebut akan dirandom menggunakan method hashName().

Jika gambar sudah berhasil diupload, langkah selanjutnya adalah melakukan insert data ke dalam database, yaitu ke dalam table posts dan disini kita memanfaatkan Eloquent dan Model untuk proses insert data-nya.

//create post
Post::create([
    'image'     => $image->hashName(),
    'title'     => $request->title,
    'content'   => $request->content
]);

Jika proses insert data berhasil dilakukan, maka kita akan redirect atau arahkan ke dalam route yang bernama posts.index dengan memberikan session flash yang memiliki key success dan isinya adalah Data Berhasil Disimpan!.

//redirect to index
return redirect()->route('posts.index')->with(['success' => 'Data Berhasil Disimpan!']);

Langkah 2 - Membuat View Form Create

Setelah berhasil membuat 2 method di dalam controller, maka kita bisa lanjutkan membuat view untuk menampilkan halaman tambah data post.

Silahkan teman-teman buat file baru dengan nama create.blade.php di dalam folder resources/views/posts, kemudian masukkan kode berikut ini di dalamnya.

resources/views/posts/create.blade.php

<!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-sm 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>

Dari penambahan kode di atas, kita membuat sebuah form yang mana untuk action-nya kita arahkan ke dalam route yang bernama posts.store. Route tersebut akan memanggil method di controller yang bernama store.

<form action="{{ route('posts.store') }}" method="POST" enctype="multipart/form-data">

	//...
	
</form>

Jika teman-teman perhatikan, pada bagian form terdapat attribute enctype="multipart/form-data". Yups attribute tersebut wajib kita tambahkan jika ada sebuah upload file di dalam form-nya.

Kemudian di dalam JavaScript, teman-teman bisa perhatikan kita melakukan inisialisasi Rich Text Editor menggunakan CKEdtor. Dan kita akan terapkan ke dalam textarea yang memiliki name content.

<script>
    CKEDITOR.replace( 'content' );
</script>

Langkah 3 - Uji Coba Insert Data Post

Silahkan teman-teman klik button TAMBAH POST pada halaman posts index atau bisa juga ke URL berikut ini http://localhost:8000/posts/create, jika berhasil maka akan menampilkan hasil seperti berikut ini.

Silahkan masukkan data-data yang diinginkan, kemudian klik button SIMPAN. Jika berhasil maka kita akan diarahkan ke halaman posts index dengan menampilkan alert / notifikasi sukses tambah data.

Sampai disini pembahasan kita tentang bagaimana cara membuat proses insert data ke dalam database dan upload gambar menggunakan Laravel. Pada artikel berikutnya, kita semua akan belajar bagaimana cara menampilkan detail data berdasarkan ID.

Terima Kasih



Fika Ridaul Maulayya
Full-Stack Developer, Content Creator and CO-Founder SantriKoding.com

Suka dengan tulisan di SantriKoding? Kamu bisa memberikan dukungan dengan berdonasi atau bagikan konten ini di sosial media. Terima kasih atas dukungan Anda!

KEBIJAKAN KOMENTAR

Saat memberikan komenatar silahkan memberikan informasi lengkap tentang error, seperti: screenshot, link kode, dll. Baca aturan komentar kami


ARTIKEL TERKAIT