Cara Import data Excel ke Database menggunakan maatwebsite Excel

Barintek
0

 

Persiapan:

    Sebelum anda memulai membuat file import terlebih dahulu persiapkan data yang akan di import. Data tersebut berada di dalam file excel. berikut contoh data yang kita upload nantinya.


        Perhatikan disini kita akan import data users yang terdiri dari 3 field (nama/email/password). ingat, field ini nanti casesensitive. 

    Setelah itu buatlah view untuk data user. jangan lupa tambahkan form pada bagian atas buat tombol import. berikut contoh tabel yang sudah jadi.


<x-app-layout>
    <x-slot name="header">
        <div class="flex items-center justify-between">
            <h2 class="font-extrabold text-2xl text-slate-900 leading-tight tracking-tight">
                {{ __('Data User') }}
            </h2>
            <span class="px-3 py-1 bg-indigo-50 text-indigo-700 rounded-full text-xs font-bold border border-indigo-100">
                Manajemen Admin
            </span>
        </div>
    </x-slot>

    <div class="py-12 bg-slate-100/50">
        <div class="max-w-7xl mx-auto sm:px-6 lg:px-8">
            <div class="bg-white overflow-hidden shadow-xl sm:rounded-3xl border border-slate-200/80">
                <div class="p-8">

                    <!-- Header Tabel & Tombol Tambah -->
                    <div class="flex flex-col sm:flex-row sm:items-center sm:justify-between gap-4 mb-6">
                        <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data"
                            class="flex flex-col items-start gap-4 p-6 bg-white rounded-lg shadow-md border border-gray-100">
                            @csrf
                            <div class="w-full">
                                <label class="block mb-2 text-sm font-medium text-gray-700" for="file">Pilih File
                                    Excel</label>
                                <input type="file" name="file" id="file" required
                                    class="block w-full text-sm text-gray-500 file:mr-4 file:py-2 file:px-4 file:rounded-md file:border-0 file:text-sm file:font-semibold file:bg-blue-50 file:text-blue-700 hover:file:bg-blue-100 cursor-pointer border border-gray-300 rounded-md">
                            </div>
                            <button type="submit"
                                class="px-4 py-2 bg-blue-600 text-black font-medium text-sm rounded-md hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-offset-2 transition-colors">
                                Import Excel
                            </button>
                        </form>
                        <div>
                            <h3 class="text-lg font-black text-slate-900">Daftar Pengguna Sistem</h3>
                            <p class="text-sm text-slate-500">Kelola informasi akun dan hak akses pengguna terdaftar.
                            </p>
                        </div>
                        <button
                            class="inline-flex items-center justify-center px-4 py-2.5 bg-indigo-600 hover:bg-indigo-700 text-white font-bold text-xs uppercase tracking-wider rounded-xl shadow-lg shadow-indigo-600/20 transition">
                            + Tambah User
                        </button>
                    </div>

                    <!-- Wrapper Tabel Modern Tailwind -->
                    <div class="overflow-x-auto rounded-2xl border border-slate-200">
                        <table class="min-w-full divide-y divide-slate-200 text-left">
                            <thead class="bg-slate-50 text-slate-700 uppercase text-xs font-bold tracking-wider">
                                <tr>
                                    <th scope="col" class="px-6 py-4">No</th>
                                    <th scope="col" class="px-6 py-4">Nama</th>
                                    <th scope="col" class="px-6 py-4">Email</th>
                                    <th scope="col" class="px-6 py-4">Role</th>
                                    <th scope="col" class="px-6 py-4">Tanggal Dibuat</th>
                                    <th scope="col" class="px-6 py-4 text-center">Aksi</th>
                                </tr>
                            </thead>
                            <tbody class="divide-y divide-slate-200 bg-white text-sm text-slate-600 font-medium">
                                @foreach ($user as $item)
                                    <tr class="hover:bg-slate-50/80 transition">
                                        <td class="px-6 py-4 text-slate-900 font-bold">1</td>
                                        <td class="px-6 py-4 text-slate-900 font-bold">{{ $item->name }}</td>
                                        <td class="px-6 py-4 text-slate-500">{{ $item->email }}</td>
                                        <td class="px-6 py-4">
                                            <span
                                                class="inline-flex items-center px-2.5 py-1 rounded-full text-xs font-bold bg-indigo-50 text-indigo-700 border border-indigo-200">
                                                {{ $item->role }}
                                            </span>
                                        </td>
                                        <td class="px-6 py-4 text-slate-500">{{ $item->created_at }}</td>
                                        <td class="px-6 py-4 text-center">
                                            <div class="flex items-center justify-center gap-2">
                                                <button
                                                    class="px-3 py-1.5 bg-slate-100 hover:bg-slate-200 text-slate-700 rounded-lg text-xs font-bold transition">Edit</button>
                                                <button
                                                    class="px-3 py-1.5 bg-rose-50 hover:bg-rose-100 text-rose-600 rounded-lg text-xs font-bold transition">Hapus</button>
                                            </div>
                                        </td>
                                    </tr>
                                @endforeach
                            </tbody>
                        </table>
                    </div>

                    <!-- Informasi Tabel / Paginasi Sederhana -->
                    <div class="mt-4 flex items-center justify-between text-xs text-slate-500 font-medium">
                        <span>Menampilkan 2 dari total data pengguna</span>
                        <div class="flex items-center gap-1">
                            <span class="px-3 py-1 bg-indigo-600 text-white rounded-lg font-bold">1</span>
                        </div>
                    </div>

                </div>
            </div>
        </div>
    </div>
</x-app-layout>


Berikut bentuk Controller. (UserController).

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\UsersImport;
use App\Models\User;
use Maatwebsite\Excel\Facades\Excel;

class UserController extends Controller
{
    public function index()
    {
        $user = User::all();
        return view('data_user', compact('user'));
    }
}


dan ini routenya:

Route::get('database/users', [UserController::class, 'index'])->name('database.users')


    Seteleh semua perisapan ini selesai mari kita mulai.


Langkah Pemasangan

  • instal maatwebsite Excel. buka terminal dan ketikkan perintah:
composer require maatwebsite/excel

  • Buat file untuk  Import. Ketikkan perintah:
php artisan make:import userImport --model=User


    Perintah ini akan membuat sebuah folder bernama Import dan sebuah file bernama userImport. coba buka App=>Import. Silahkan klik UserImport. Tambahkan code berikut:
<?php

namespace App\Imports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;

namespace App\Imports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;

class UsersImport implements ToModel, WithHeadingRow
{
    public function model(array $row)
    {
        return new User([
            'name'     => $row['nama'],
            'email'    => $row['email'],
            'password' => bcrypt($row['password']),
        ]);
    }
}


  • Sekarang buat route baru:


    Route::get('/users/import', [UserController::class, 'showImportForm']);
    Route::post('/users/import', [UserController::class, 'import'])->name('users.import');

    Tambahkan sintak pada UserController:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\UsersImport;
use App\Models\User;
use Maatwebsite\Excel\Facades\Excel;

class UserController extends Controller
{
    public function index()
    {
        $user = User::all();
        return view('data_user', compact('user'));
    }

    public function import(Request $request)
    {
        $request->validate([
            'file' => 'required|mimes:xlsx,xls,csv'
        ]);

        Excel::import(new UsersImport, $request->file('file'));

        return redirect()->back()->with('success', 'Data berhasil diimport!');
    }
}


    Saatnya dicoba

Posting Komentar

0Komentar

Posting Komentar (0)