Berikut adalah artikel tutorial tentang cara menampilkan data dari database MySQL ke grafik di Laravel menggunakan Chart.js, salah satu library grafik berbasis JavaScript yang populer. Di tutorial ini, kita akan menggunakan data dari MySQL untuk ditampilkan dalam bentuk grafik (chart) di frontend Laravel.

Menampilkan Data dari MySQL ke Grafik di Laravel Menggunakan Chart.js

Dalam pengembangan aplikasi, kita sering membutuhkan tampilan data dalam bentuk grafik agar lebih mudah dipahami. Laravel membuat proses ini sangat sederhana, terutama dengan menggunakan library seperti Chart.js yang mudah diintegrasikan.

Berikut adalah langkah-langkah lengkap untuk menampilkan data dari MySQL ke dalam grafik di Laravel menggunakan Chart.js.

Langkah 1: Install Laravel dan Setup Database

Sebelum ke step berikutnya, ada baiknya mengikuti tutorial sebeumnya tentang Belajar CRUD lengkap dengan fitur upload gambar di Laravel 10. Jika Anda belum memiliki proyek Laravel, Anda bisa membuatnya dengan perintah berikut:

composer create-project --prefer-dist laravel/laravel laravel-chart

Konfigurasi koneksi database MySQL di file .env:

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

Jalankan perintah berikut untuk membuat database jika belum ada:

php artisan migrate

Langkah 2: Buat Model dan Migration

Kita akan membuat tabel sales untuk menyimpan data penjualan. Buat model dan migration dengan perintah berikut:

php artisan make:model Sale -m

Ini akan menghasilkan file migration di database/migrations. Edit file migration tersebut untuk mendefinisikan tabel sales:

public function up()
{
    Schema::create('sales', function (Blueprint $table) {
        $table->id();
        $table->string('product_name');
        $table->integer('quantity');
        $table->timestamps();
    });
}

Jalankan migrasi untuk membuat tabel:

php artisan migrate

Langkah 3: Isi Data ke Database

Anda bisa memasukkan data penjualan secara manual atau menggunakan seeder untuk mengisi data ke tabel sales. Buat seeder dengan perintah:

php artisan make:seeder SalesTableSeeder

Isi data dummy di SalesTableSeeder.php:

use App\Models\Sale;
use Illuminate\Database\Seeder;

class SalesTableSeeder extends Seeder
{
    public function run()
    {
        Sale::create(['product_name' => 'Product A', 'quantity' => 120]);
        Sale::create(['product_name' => 'Product B', 'quantity' => 90]);
        Sale::create(['product_name' => 'Product C', 'quantity' => 75]);
        Sale::create(['product_name' => 'Product D', 'quantity' => 60]);
        Sale::create(['product_name' => 'Product E', 'quantity' => 150]);
    }
}

Jalankan seeder untuk mengisi data:

php artisan db:seed --class=SalesTableSeeder

Jika berhasil, maka data akan masuk di database sebagai berikut:

Langkah 4: Buat Controller untuk Menampilkan Data

Sekarang kita buat controller yang akan mengambil data dari database dan mengirimkannya ke view untuk ditampilkan dalam bentuk grafik.

Buat controller dengan perintah:

php artisan make:controller ChartController

Edit file ChartController.php untuk mengambil data penjualan dari database dan mengirimkannya ke view:

namespace App\Http\Controllers;

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

class ChartController extends Controller
{
    public function index()
    {
        // Mengambil semua data dari tabel sales
        $sales = Sale::all();
        
        // Menyiapkan data untuk Chart.js
        $labels = $sales->pluck('product_name'); // Label berupa nama produk
        $quantities = $sales->pluck('quantity'); // Data berupa quantity

        return view('chart', compact('labels', 'quantities'));
    }
}

Langkah 5: Buat Route untuk Menampilkan Grafik

Tambahkan route di routes/web.php:

use App\Http\Controllers\ChartController;

Route::get('/chart', [ChartController::class, 'index'])->name('chart.index');

Langkah 6: Install Chart.js

Kita akan menggunakan Chart.js untuk menampilkan grafik. Tambahkan link Chart.js di view Anda menggunakan CDN. Anda bisa menambahkan script ini di view yang akan kita buat di langkah selanjutnya.

Langkah 7: Buat View untuk Menampilkan Grafik

Sekarang, kita buat file view di resources/views/chart.blade.php. File ini akan menampilkan grafik menggunakan data yang kita kirim dari controller. 
 

@extends('layout')

@section('title', 'Sales Chart')

@section('content')
<div class="container mt-5">
    <h2 class="mb-4">Sales Data</h2>

    <!-- Canvas untuk Chart.js -->
    <canvas id="salesChart" width="400" height="200"></canvas>
</div>

<!-- Script Chart.js -->
<script src="https://cdn.jsdelivr.net/npm/chart.js"></script>

<script>
    var ctx = document.getElementById('salesChart').getContext('2d');

    // Data yang dikirim dari controller
    var labels = {!! json_encode($labels) !!};
    var data = {!! json_encode($quantities) !!};

    // Membuat grafik bar
    var salesChart = new Chart(ctx, {
        type: 'bar',
        data: {
            labels: labels, // Nama produk
            datasets: [{
                label: 'Quantity Sold',
                data: data, // Jumlah yang terjual
                backgroundColor: 'rgba(75, 192, 192, 0.2)',
                borderColor: 'rgba(75, 192, 192, 1)',
                borderWidth: 1
            }]
        },
        options: {
            scales: {
                y: {
                    beginAtZero: true
                }
            }
        }
    });
</script>
@endsection

Tambahkan layout.blade.php di folder views dan isi code berikut:

<!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>@yield('title', 'CRUD Posts')</title>

    <!-- Tambahkan Bootstrap CSS atau styling lainnya -->
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
</head>
<body>

    <!-- Navbar -->
    <nav class="navbar navbar-expand-lg navbar-light bg-light">
        <a class="navbar-brand" href="{{ route('posts.index') }}">My Blog</a>
        <div class="collapse navbar-collapse">
            <ul class="navbar-nav mr-auto">
                <li class="nav-item">
                    <a class="nav-link" href="{{ route('chart.index') }}">Chart</a>
                </li>
            </ul>
        </div>
    </nav>

    <!-- Main Content -->
    <div class="container mt-5">
        @if (session('success'))
            <div class="alert alert-success">
                {{ session('success') }}
            </div>
        @endif

        @yield('content')
    </div>

    <!-- Tambahkan Bootstrap JS atau script lainnya -->
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
</body>
</html>

Langkah 8: Testing

Jalankan server Laravel:

php artisan serve

Buka browser dan akses URL:

http://localhost:8000/chart

Sekarang, Anda akan melihat data penjualan dari database MySQL ditampilkan dalam bentuk grafik bar menggunakan Chart.js
Jika anda sudah melakukan step by step dengan benar, maka akan menghasilkan result berikut: