Menampilkan Data Berdasarkan Antara Dua Tanggal di Laravel 8

Menampilkan Data Berdasarkan Antara Dua Tanggal di Laravel 8

Admin
Admin・ 16 September 2021
8 min read ・ 5864 views

Terkadang dalam membuat suatu sistem atau program, kita perlu menambahkan fitur filter tanggal untuk mendapatkan data sesuai dengan tanggal yang diinginkan (terutama untuk sistem atau program yang terdapat fitur report). Dan di artikel ini, saya akan share tutorial bagaimana cara menampilkan data dengan filter berdasarkan antara dua tanggal di laravel 8.

$users = DB::table('users')
           ->whereBetween('votes', [1, 100])
           ->get();

Untuk membuat fitur filter antara dua tanggal atau antara dua value di laravel, kita bisa memakai query builder yang telah disediakan yaitu whereBetween seperti contoh di atas. Method whereBetween memverifikasi bahwa nilai atau value pada kolom berada di antara dua nilai yang telah ditetapkan.

Oke, mari kita langsung saja ke kode 👇 👨‍💻

Langkah 1: Install Laravel

//via Laravel Installer
composer global require laravel/installer
laravel new laravel-between-two-dates

//via Composer
composer create-project laravel/laravel laravel-between-two-dates

Pada langkah yang pertama ini, kita perlu menginstall laravel versi terbaru (saat ini versi 8) yang akan kita pakai untuk implementasi membuat fitur filter data atau mengambil dan menampilkan data berdasarkan dua tanggal. Untuk installasi laravel bisa menggunakan laravel installer atau menggunakan composer seperti contoh di atas.

Silahkan memilih salah satu cara yang ingin digunakan untuk installasi laravel. Dari kedua contoh perintah installasi laravel di atas, akan sama-sama menghasilkan atau generate laravel project dengan nama laravel-between-two-dates.

Tunggu hingga proses installasi selesai dan jika sudah selesai, jangan lupa untuk masuk ke direktori project menggunakan perintah cd laravel-between-two-dates.

Langkah 2: Setup Database

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_beetwen_two_dates
DB_USERNAME=root
DB_PASSWORD=

Selanjutnya, buat database baru untuk percobaan membuat fitur filter data atau mengambil dan menampilkan data berdasarkan antara dua tanggal di laravel 8. Jika kamu menggunakan xampp sebagai local development, silahkan buat database baru di localhost/phpmyadmin. Disini saya beri contoh, saya membuat database baru dengan nama laravel-between-two-dates. Kemudian jangan lupa juga untuk menyesuaikan DB_DATABASE pada file .env seperti pada contoh di atas.

Langkah 3: Buat Model dan Migration

php artisan make:model Registrant -m

Oke, kemudian di langkah ketiga kita perlu membuat file model dan migration untuk Registrant. Silahkan jalankan perintah seperti di atas untuk generate file Registrant model dan migration.

 public function up()
    {
        Schema::create('registrants', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamps();
        });
    }

Selanjutnya, buka file database/migrations/xxxx_xx_xx_xxxxxx_create_registrants_table.php. Kita tambahkan field image di table images seperti kode di atas. Jika sudah, save dan jalankan perintah php artisan migrate untuk memigrasi semua file migration.

Langkah 4: Generate Data Dummy

php artisan make:factory RegistrantFactory --model=Registrant

Kita perlu data dummy untuk mengisi table registrants. Untuk itu, kita akan membuat data dummy tersebut menggunakan factory di laravel. Jalankan perintah seperti di atas untuk membuat file RegistrantFactory dengan target model Registrant.

 public function definition()
    {
        return [
            'name' => $this->faker->name(),
            'email' => $this->faker->unique()->safeEmail(),
            'created_at'=> $this->faker->dateTimeThisMonth($max = 'now', $timezone = null)  
        ];
    }

Kemudian, buka file RegistrantFactory yang baru saja dibuat di direktori database/factories/RegistrantFactory.php. Pada method definition, ubah menjadi seperti di atas.

php artisan tinker
Registrant::factory()->count(50)->create()

Selanjutnya kita generate data dummy menggunakan tinker. Pertama, jalankan perintah php artisan tinker, kemudian jalankan perintah Registrant::factory()->count(50)->create().

Langkah 5: Define Route & Logic

<?php
use Illuminate\Support\Facades\Route;
use Carbon\Carbon;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/
Route::get('/', function () {
    if (request()->start_date || request()->end_date) {
        $start_date = Carbon::parse(request()->start_date)->toDateTimeString();
        $end_date = Carbon::parse(request()->end_date)->toDateTimeString();
        $data = App\Models\Registrant::whereBetween('created_at',[$start_date,$end_date])->get();
    } else {
        $data = App\Models\Registrant::latest()->get();
    }
    
    return view('welcome', compact('data'));
});

Pada langkah kelima, kita perlu membuat logic untuk menampilkan data berdasarkan antara dua tanggal di laravel 8. Sebagai contoh saja, kita akan membuat logic tersebut di routes/web.php atau tepatnya di dalam Route::get('/').

Buka file routes/web.php, kemudian ubah code yang ada menjadi seperti di atas. Disini kita menambahkan logic, jika ada request()->start_date atau ada request()->end_date, maka akan menampilkan data registrant dengan data created_at antara tanggal yang dipilih (start_date dan end_date). Tapi jika tidak ada kedua request tersebut, maka akan menampilkan seluruh data dari table registrant.

Langkah 6: Setup View

<!doctype html>
<html lang="en">
    <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- Bootstrap CSS -->
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous">
        <title>Get Data Between Two Dates in Laravel 8</title>
    </head>
    <body>
        <div class="container my-4">
            <div class="row">
                <h2 class="fs-3 text-center my-3">Get Data Between Two Dates in Laravel 8</h2>
                <div class="my-2">
                    <form action="/" method="GET">
                        <div class="input-group mb-3">
                            <input type="date" class="form-control" name="start_date">
                            <input type="date" class="form-control" name="end_date">
                            <button class="btn btn-primary" type="submit">GET</button>
                        </div>
                    </form>
                </div>
                <table class="table">
                    <thead>
                        <tr>
                            <th scope="col">#</th>
                            <th scope="col">Name</th>
                            <th scope="col">Email</th>
                            <th scope="col">Date</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach ($data as $key => $data)
                        <tr>
                            <th scope="row">{{ ++$key }}</th>
                            <td>{{ $data->name }}</td>
                            <td>{{ $data->email }}</td>
                            <td>{{ $data->created_at }}</td>
                        </tr>
                        @endforeach
                    </tbody>
                </table>
            </div>
        </div>
        <!-- Option 1: Bootstrap Bundle with Popper -->
        <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script>
    </body>
</html>

Oke, di langkah terakhir kita ubah semua kode di file welcome.blade.php menjadi seperti kode di atas. Disini kita buat simple saja, yaitu hanya menampilkan data di table dan menambahkan form untuk filter tanggal (start_date dan end_date).

Langkah 7: Testing

Laravel 8: get data between two dates

Setelah melalui langkah-langkah, mulai dari install laravel sampai di langkah setup view, di akhir artikel tutorial ini kita akan coba filter data berdasarkan antara dua tanggal di laravel 8. Silahkan jalankan laravel project dengan menjalankan perintah php artisan serve, lalu buka project di browser. Kemudian coba filter data dengan memilih start date dan end date seperti contoh gambar di atas.

Demikianlah artikel tutorial menampilkan data berdasarkan antara dua tanggal di laravel 8 kali ini. Kamu bisa improve kode di artikel ini sesuai dengan kebutuhan project kamu. Semoga artikel ini bisa bermanfaat, selamat mencoba dan sampai jumpa di artikel berikutnya. 👋

Happy coding. 🚀 👨‍🚀 👨‍💻

Tinggalkan Komentar
Loading Comments