Laravel 10 Excel ve CSV Dosya İçe Aktarma ve Dışa Aktarma

L

Bu kısa örnekte, Laravel 10 üzerinde Excel ve CSV dosyalarını içe aktarma işlemi hakkında bilgi vereceğim. Ayrıca Laravel 10'da CSV dosyalarını dışa aktarma örneğini de göstereceğim. Excel dosyalarını Laravel 10'da içe aktarma örneğini görmek isterseniz, doğru yerdesiniz.

İçe aktarma ve dışa aktarma görevleri için "maatwebsite/excel" adlı composer paketini kullanacağız. Bu örnekte, kullanıcıların yüklenebileceği bir CSV dosyası için basit bir form oluşturacağım. Ardından veritabanındaki tüm kullanıcıları bir excel dosyası olarak indirebileceğiniz bir dışa aktarma rotası oluşturacağım.

Aşağıdaki adımları izleyerek Laravel 10 uygulamasında içe aktarma ve dışa aktarma işlemlerini nasıl gerçekleştireceğinizi görelim. Bu şekilde .csv, .xls ve .xlsx dosya türlerinde dışa aktarma yapabileceksiniz.

Adım 1: Laravel 10 Projesi Oluşturma:

İlk olarak, Laravel 10 projenizi oluşturmak için aşağıdaki komutu kullanarak bir terminal veya komut istemi açın:

composer create-project laravel/laravel example-app

Adım 2: maatwebsite/excel Paketini Yükleyin:

Bu adımda, maatwebsite/excel paketini Composer paket yöneticisi aracılığıyla yüklememiz gerekiyor. Terminalinizi açın ve aşağıdaki komutu çalıştırın:

composer require maatwebsite/excel

Adım 3: Sahte Kayıtlar Oluşturma:

Bu adımda, kullanıcılar tablosu için bazı sahte kayıtlar oluşturacağız. Bu şekilde bu kullanıcıları dışa aktarabiliriz. Aşağıdaki tinker komutunu çalıştıralım:

php artisan tinker

User::factory()->count(10)->create()

Adım 4: İçe Aktarma Sınıfı Oluşturma:

maatwebsite 3 sürümünde, içe aktarma sınıfını oluşturmanın ve bunu denetleyicide kullanmanın bir yolu vardır. Yeni bir İçe Aktarma sınıfı oluşturmak için aşağıdaki komutu çalıştırın ve belirtilen dosyada aşağıdaki kodu değiştirin:

php artisan make:import UsersImport --model=User

app/Imports/UsersImport.php

<?php
  
namespace App\Imports;
  
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
use Hash;
  
class UsersImport implements ToModel, WithHeadingRow
{
    /**
    * @param array $row
    *
    * @return \Illuminate\Database\Eloquent\Model|null
    */
    public function model(array $row)
    {
        return new User([
            'name'     => $row['name'],
            'email'    => $row['email'], 
            'password' => Hash::make($row['password']),
        ]);
    }
}

Adım 5: Dışa Aktarma Sınıfı Oluşturma:

maatwebsite 3 sürümünde, dışa aktarma sınıfını oluşturmanın ve bunu denetleyicide kullanmanın bir yolu vardır. Yeni bir Dışa Aktarma sınıfı oluşturmak için aşağıdaki komutu çalıştırın ve belirtilen dosyada aşağıdaki kodu değiştirin:

php artisan make:export UsersExport --model=User

app/Exports/UsersExport.php

<?php
  
namespace App\Exports;
  
use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
  
class UsersExport implements FromCollection, WithHeadings
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function collection()
    {
        return User::select("id", "name", "email")->get();
    }
  
    /**
     * Write code on Method
     *
     * @return response()
     */
    public function headings(): array
    {
        return ["ID", "Name", "Email"];
    }
}

Adım 6: Controller Oluşturma:

Bu adımda, index(), export() ve import() yöntemine sahip UserController'ü oluşturacağız. İlk olarak aşağıdaki komutu kullanarak controller oluşturalım ve içindeki kodu güncelleyelim.

php artisan make:controller UserController

Şimdi, UserController dosyasındaki kodu güncelleyelim.

app/Http/Controllers/UserController.php

<?php
  
namespace App\Http\Controllers;
  
use Illuminate\Http\Request;
use App\Exports\UsersExport;
use App\Imports\UsersImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\User;
  
class UserController extends Controller
{
    /**
    * @return \Illuminate\Support\Collection
    */
    public function index()
    {
        $users = User::get();
  
        return view('users', compact('users'));
    }
        
    /**
    * @return \Illuminate\Support\Collection
    */
    public function export() 
    {
        return Excel::download(new UsersExport, 'users.xlsx');
    }
       
    /**
    * @return \Illuminate\Support\Collection
    */
    public function import() 
    {
        Excel::import(new UsersImport,request()->file('file'));
               
        return back();
    }
}

Adım 7: Rotaların Oluşturulması:

Bu adımda, kullanıcı listesi, kullanıcıları içe aktarma ve kullanıcıları dışa aktarma için rotalar oluşturmamız gerekiyor. "routes/web.php" dosyanızı açın ve aşağıdaki rotayı ekleyin.

routes/web.php

<?php
  
use Illuminate\Support\Facades\Route;
  
use App\Http\Controllers\UserController;
  
/*
|--------------------------------------------------------------------------
| 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::controller(UserController::class)->group(function(){
    Route::get('users', 'index');
    Route::get('users-export', 'export')->name('users.export');
    Route::post('users-import', 'import')->name('users.import');
});

Adım 8: Blade Dosyasının Oluşturulması:

Son adımda, users.blade.php (resources/views/users.blade.php) adında bir blade dosyası oluşturalım. Burada tasarım kodunu yazacağız ve aşağıdaki kodu ekleyeceğiz:

resources/views/users.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 10 Import Export Excel to Database Example</title>
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
     
<div class="container">
    <div class="card bg-light mt-3">
        <div class="card-header">
            Laravel 10 Import Export Excel to Database Example
        </div>
        <div class="card-body">
            <form action="{{ route('users.import') }}" method="POST" enctype="multipart/form-data">
                @csrf
                <input type="file" name="file" class="form-control">
                <br>
                <button class="btn btn-success">Import User Data</button>
            </form>
  
            <table class="table table-bordered mt-3">
                <tr>
                    <th colspan="3">
                        List Of Users
                        <a class="btn btn-warning float-end" href="{{ route('users.export') }}">Export User Data</a>
                    </th>
                </tr>
                <tr>
                    <th>ID</th>
                    <th>Name</th>
                    <th>Email</th>
                </tr>
                @foreach($users as $user)
                <tr>
                    <td>{{ $user->id }}</td>
                    <td>{{ $user->name }}</td>
                    <td>{{ $user->email }}</td>
                </tr>
                @endforeach
            </table>
  
        </div>
    </div>
</div>
     
</body>
</html>

Laravel Uygulamasını Çalıştırma:

Tüm gerekli adımlar tamamlandıktan sonra, aşağıdaki komutu girip enter tuşuna basarak Laravel uygulamasını çalıştırmanız gerekmektedir:

php artisan serve

Şimdi, web tarayıcınıza gidin, verilen URL'yi yazın ve uygulama çıktısını görüntüleyin:

http://localhost:8000/users

By Aydın Yağız

Aydın Yağız

Teknolojiye olan tutkumla inovasyonu destekler, kullanıcı deneyimini önceliklerim arasına alırım. Kendi yeteneklerimi ve bilgilerimi paylaşarak, daha geniş bir topluluğun faydalanmasını sağlarım. İş birliği içinde hareket ederek, geleceğin teknoloji dünyasına katkıda bulunmayı hedeflerim. Sizi de bu heyecan verici yolculuğa davet ediyor, fikirlerinizi paylaşmaya ve teknolojiye dair sınırları zorlamaya teşvik ediyorum. Birlikte büyüyelim ve yeni ufuklara açılalım!

İletişime Geçin

Kodlama dünyasına adım atın ve deneyimlerinizi paylaşın. Siz de bu aktif topluluğa katılarak yeni bağlantılar kurun, fikir alışverişinde bulunun ve bilgi birikiminizi artırın.

Özelleştir

Farklı yazı tipleri ve renk seçenekleriyle stilinizi kişiselleştirin. Aşağıdaki örneklerden birini deneyerek sizin için en uygun olanı seçin.

Yazı Tipi Örnekleri

Renk Örnekleri