Upload File Excel ke Database Dengan Laravel 11 | Maatwebsite/Excel

Baringin
By -
0

 Pendahuluan


    Bagaimana jika kita memiliki data banyak di file excel dan kita ingin memindahkan ke dalam database kita? Laravel sendiri sudah menyediakan library untuk mengatasi hal tersebut. Anda dapat mengecek di situs laravel excel

    Pada materi kali ini kita akan menggunakan library excel untuk melakukan upload data dari excel ke database. Namun sebelumnya kita perlu mempersiapkan beberapa bahan. Silahkan ikuti tutorial dibawah ini


Persiapan

1. Sebelum memulai membuat projek, mari kita persiapkan terlebih dahulu data yang akan kita upload nantinya. Data tersebut. Silahkan anda buat sebuah data di Microsoft Excel yang terdiri dari 4 field (No, Nama, Email dan passwor) seperti berikut:

No Nama Email PASSWORD
1 Admin admin@gmail.com admin
2 USer user@gmail.com user

    Tabel tersebut akan kita upload ke dalam tabel database yang bernama users nantinya. Jadi field tersebut kita sesuaikan saja dengan field yang secara otomatis diubat oleh laravel. 


2. Instal Laravel 11 anda, dan pastikan anda sudah melakukan konfigurasi pada .env untuk menghubungkan ke database. Jangan lupa untuk melakukan migrate. Anda dapat melihat tutorialnya di " Cara Instal Laravel ", sedangkan untuk konfigurasi dan migrate dapat anda baca tutorial   "Membuat Database dan Konfigurasi .env". Latihan kali ini kita memberi nama projek dengan nama "LatihanLaravel".


3. Buat User Interface untuk upload file. Anda dapat ketikkan perintah berikut di terminal:

php artisan make:view Upload.

    Buka root projek Resources => Views => Upload.blade.php dan tambahkan script berikut sebagai UI nantinya:

<!doctype html>
<html lang="en">

<head>
    <title>Upload File Excel</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-QWTKZyjpPEjISv5WaRU9OFeRpok6YctnYmDr5pNlyT2bRjXh0JMhjY6hW+ALEwIH" crossorigin="anonymous">
</head>

<body>
    <div class="container mt-5 border p-5">
        <form method="post" action="/upload-file" enctype="multipart/form-data">
            @csrf
            <div class="form-label">Pilih File</div>
            <input type="file" name="upload_file" class="form-control-file">
            <button type="submit" class="btn btn-info ">Upload</button>
        </form>
    </div>
</body>

</html>


Sekarang buka Routes => web.php dan buat jalur untuk mengakses UI yang telah kita buat tadi:

Route::get('/upload', function () {
    return view('Upload');
});

    Silahkan jalankan projek anda dengan mengetikkan perintah berikut di terminal:

 php artisan serve

selanjutnya buka browser dan ketikkan di url perintah berikut:

http://127.0.0.1:8000/upload

    Berikut bentuk UI yang telah kita desain tadi:


4. Sekarang anda buat sebuah controller baru dengan nama USerController.php dengan mengetikkan perintah berikut pada terminal

php artisan make:controller USerController


    Buatlah method baru di USerController.php dengan nama "upload_file()" seperti berikut:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class USerController extends Controller
{
    public function upload_file(Request $request)
    {
        dd($request->all());
    }
}

    Perintah dd()$request->() berfungsi untuk mengecek apakah data sudah dibaca atau belum. Jika terbaca maka akan tampil di browser seperti berikut:

array:2 [ // app\Http\Controllers\USerController.php:11
  "_token" => "StB1mdp6tQZ7WTudWRdAO6J0zgEyTmGuq0FSzXRR"
  "upload_file" => Illuminate\Http\UploadedFile {#242 }
]


5. Sekarang kita akan memasangkan library untuk mengakses file excel. 

    Buka projek anda tadi di VsCode, atau  anda dapat menggunakan terminal CMD, dengan masuk ke "laragon/www/latihanLaravel". Kita akan memasang library Excel di projek kita tadi. Ketikkan perintah berikut pada terminal:

composer require maatwebsite/excel

    Tunggu proses downloand sampai selesai. 

    

6. Setelah selesai download library excel, selanjutnya kita buat file import dengan mengetikkan perintah berikut pada terminal:

php artisan make:import UserImport

     Perintah tersebut merupakan perintah untuk membuat folder import di App dan satu buah file bermana UserImport. Anda dapat melihat file tersebut di App =>Import => UserImport.


7. Mari kita akses file USerImport melewati USerController terlebih dahulu. Kembali ke file UserController.php dan edit script seperti berikut:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Imports\UserImport; // Mengakses UserImport
use Excel; //Libary untuk mengakses Excel

class USerController extends Controller
{
    public function upload_file(Request $request)
    {
        //dd($request->all());
        Excel::import(new UserImport, $request->file('upload_file'));
    }
}


    Kita akses terlebih dahulu 2 buah library dengan menambahkan 

    use App\Imports\UserImport; // Mengakses UserImport

    use Excel; //Libary untuk mengakses Excel

    Perhatikan pada Objek import, terdapat perintah $request->file(upload_file). Upload_file merupakan nama dari form input yang kita buat di halaman UI sebelumnya. Jadi nama ini harus sama dengan nama yang dikirim dari UI.8. Buka root App => Import => UserImport. Kita akan coba mengakses data dari excel dengan melakukan Dump and Die (dd). Silahkan tambahkan script berikut:

<?php

namespace App\Imports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;

class UserImport implements ToCollection
{
    /**
     * @param Collection $collection
     */
    public function collection(Collection $collection)
    {
        dd($collection);
    }
}


Coba jalankan projek anda. Jika semua langkah benar maka akan tampil seperti berikut:

Illuminate\Support\Collection {#453 // app\Imports\UserImport.php:15 #items: array:3 [ 0 => Illuminate\Support\Collection {#445 } 1 => Illuminate\Support\Collection {#447 } 2 => Illuminate\Support\Collection {#451 #items: array:3 [ 0 => "user" 1 => "user@gmail.com" 2 => "user" ] #escapeWhenCastingToString: false } ] #escapeWhenCastingToString: false }

NB. Centang tanda segitiga untuk melihat item yang di kirim.


8. Buat  method ToModel untuk menyimpan file excel ke database. Anda dapat menambahkan perintah berikut di UserImport:

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

class UserImport implements ToCollection, ToModel // Tambahkan class ToModel
..............

    Kemudain buatlah method ToModel. Berikut Scriptnya:

<?php

namespace App\Imports;

use Illuminate\Support\Collection;
use Maatwebsite\Excel\Concerns\ToCollection;
use Maatwebsite\Excel\Concerns\ToModel;
use App\Models\User;
use Hash;

class UserImport implements ToCollection, ToModel
{
    private $cuttent = 0;
    /**
     * @param Collection $collection
     */
    public function collection(Collection $collection)
    {
        // dd($collection);
    }

    public function model(array $row)
    {
        $this->cuttent++;
        if ($this->cuttent > 1) {
            $count = User::where('email', '=', $row[2])->count();
            if (empty($count)) {
                $data = ([
                    'name'         => $row[1],
                    'email'        => $row[2],
                    'password'     => Hash::make($row[3])
                ]);

                User::create($data);
            }
        }
    }
}

 Perintah atau variabel $cuttent merupakan script yang menentukan di row berapa record akan di upload. Logika if ($this->cuttent >1) meminta sistim membaca record dari row ke dua di dalam excel. Artinya pada row pertama (Header Tabel) tidak akan di baca oleh sistim.

    Sedangkan perintah $count = User::where('email', '=', $row[2])->count(); meminta sistim agar membaca email yang telah tersimpan di dalam database. Jika ada email yang sama maka data baru tidak akan diupload.


    Terakhir Jalankan program dan coba upload file excel yang telah di buat tadi.

Post a Comment

0Comments

Post a Comment (0)