utilities
12000 yıldız

Laravel Excel

Geliştirici: Maatwebsite

Excel ve CSV dosyalarını içe ve dışa aktarmayı kolaylaştıran güçlü ve hızlı veri işleme paketi.

Kurulum

Composer
composer require maatwebsite/excel

Dokümantasyon & Kullanım

Markdown

Laravel Excel

Laravel Excel (Maatwebsite), PhpSpreadsheet kütüphanesini Laravel'in zarif koleksiyonları, kuyruk (queue) sistemi, Blade görünümleri ve event yapısıyla harmanlayarak büyük Excel ve CSV dosyalarını zahmetsizce içe (import) ve dışa (export) aktarmanızı sağlar.

Neden Tercih Edilmeli?

  • Kuyruk (Queue) Desteği: Milyonlarca satırlık devasa veri setlerini sunucuyu kitlemeden arka plan kuyruklarında parça parça (chunk/queue) işler.
  • Blade ile Export: Karmaşık hücre stilleri, başlıklar ve tablolar yerine doğrudan standart HTML Blade şablonu render ederek Excel oluşturabilir.
  • Doğrudan Model Eşleme: İçe aktarılan satırları otomatik olarak Eloquent modellerine dönüştürür.
  • Toplu Doğrulama (Batch Validation): İçe aktarma sırasında her satırı Laravel Form Request doğrulama kurallarıyla test edebilir ve hataları raporlar.
  • Çoklu Sayfa (Multiple Sheets): Tek bir Excel çalışma kitabında birden fazla sekmeyi kolayca yönetir.

Kurulum

Composer ile paketi yükleyin:

composer require maatwebsite/excel

Yapılandırma dosyasını yayınlayın:

php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider" --tag=config

Temel Kullanım

1. Dışa Aktarma (Export) Sınıfı Oluşturma

Artisan ile bir export sınıfı üretin:

php artisan make:export UsersExport --model=User

app/Exports/UsersExport.php dosyasını düzenleyin:

namespace App\Exports;

use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;

class UsersExport implements FromCollection, WithHeadings, WithMapping
{
    public function collection()
    {
        return User::all();
    }

    public function headings(): array
    {
        return ['ID', 'Ad Soyad', 'E-posta', 'Kayıt Tarihi'];
    }

    public function map($user): array
    {
        return [
            $user->id,
            $user->name,
            $user->email,
            $user->created_at->format('d.m.Y H:i'),
        ];
    }
}

Controller üzerinden indirme:

namespace App\Http\Controllers;

use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;

class UserController extends Controller
{
    public function export()
    {
        return Excel::download(new UsersExport, 'kullanicilar.xlsx');
    }
}

2. Blade Şablonu ile Dışa Aktarma

namespace App\Exports;

use App\Models\Invoice;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;

class InvoicesExport implements FromView
{
    public function view(): View
    {
        return view('exports.invoices', [
            'invoices' => Invoice::with('customer')->get()
        ]);
    }
}

3. İçe Aktarma (Import) Örneği

Artisan ile bir import sınıfı oluşturun:

php artisan make:import UsersImport --model=User
namespace App\Imports;

use App\Models\User;
use Illuminate\Support\Facades\Hash;
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['ad_soyad'],
            'email'    => $row['e_posta'],
            'password' => Hash::make($row['parola'] ?? '12345678'),
        ]);
    }
}

Controller üzerinden dosyayı içe aktarma:

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

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

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

    return back()->with('success', 'Veriler başarıyla yüklendi.');
}