Laravel excel export

Farid Babayev
3 min readSep 28, 2019

--

Salam dostlar, bu gün sizlərlə bir yerdə Laraveldə adam kimi excel export eləməyi öyrənəcəyik. Hazırsınızsa başlıyaq.

İlk öncə boş bir laravel proyekti yaradaq.

composer create-project laravel/laravel excel_export

Daha sonra istifadə edəcəyimiz package-i əlavə edək.

composer require maatwebsite/excel

Daha sonra isə proyektimizdə olan config/app.php faylına package üçün lazım olan provider və alias-ı əlavə edək.

'providers' => [
/*
* Package Service Providers...
*/
Maatwebsite\Excel\ExcelServiceProvider::class,
]
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
]

Əgər package üçün xüsusi config faylı lazım olsa onu da əlavə edə bilərsiniz.

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

Proyekti yaradıb package-i əlavə elədiyimizə görə keçək kod hissəsinə. Nümünə üçün belə bir database strukturun olduğunu düşünək. Kitab müəllifləri və kitabların adları olduğu bir datamız var və bizdən kitabların adlarını (müəllifləri ilə bir yerdə ) excelde istəyirlər.

İndi isə keçək export temasına. Deməli app/Http folderin içində Export adında bir folder yaradırıq. Həmin folderin içində BooksExport adında bir php faylı yaradırıq.

<?php


namespace
App\Http\Exports;



class BooksExport
{
// Ha bırda babat kodlar olacaq :D
}

PHP faylını yaratdıqdan sonra Exportable trait-ni əlavə edirik ki, export işlərini zad edə bilsin.

<?php


namespace
App\Http\Exports;

use Maatwebsite\Excel\Concerns\Exportable;

class BooksExport
{
use Exportable;
}

Bundan sonra isə bir neçə interface-lərdən istifadə edəcəyik. Standart export üçün lazım olan interface-ləri mən əlavə edəcəm amma digər interface-lər haqda buradan baxa bilərsiniz. Əlavə olaraq məlumatı həm querybuilder vasitəsilə həm də model ilə çəkə bilərsiniz. Mən bu məqalədə querybuildier ilə məlumatı çəkəcəm. Model istəsəz rəsmi documentation səhifəsində yazılıb baxa bilərsiniz.

Əsasən 4 dənə ən çox istifadə elədiyim interface istifadə edirəm və bunları sizə də məsləhət görürəm.

  1. FromCollection - QueryBuilder və ya model ilə çəkdiyimiz məlumatdan (collection) istifadə eləmək üçün istifadə olunur.
  2. WithHeadings - Excel-də məlumatları export edəndə başlıq əlavə eləmək üçün istifadə olunur.
  3. ShouldAutoSize — Exceldə avtomatik stünların uzunluqların zad eləmək üçün istifadə olunur.
  4. WithTitle — Exceldə səhifəyə yeni ad eləmək üçün istifadə olunur.

İndi isə yuxarıdakı interfacə-ləri və lazımı methodları əlavə edək.

<?php


namespace
App\Http\Exports;


use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;

class BooksExport implements FromCollection, WithHeadings, ShouldAutoSize, WithTitle
{
use Exportable;

/**
*
@return \Illuminate\Support\Collection
*/
public function
collection()
{
//
}

/**
*
@return array
*/
public function
headings(): array
{
//
}

/**
*
@return string
*/
public function
title(): string
{
//
}
}

Daha sonra isə bu methodların haqqın verək və içinə lazımı məlumatları yazaq.

<?php


namespace
App\Http\Exports;


use Illuminate\Support\Facades\DB;
use Maatwebsite\Excel\Concerns\Exportable;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;

class BooksExport implements FromCollection, WithHeadings, ShouldAutoSize, WithTitle
{
use Exportable;

/**
*
@return \Illuminate\Support\Collection
*/
public function
collection()
{
return DB::table('Books')
->join('Authors',['Books.author_id' => 'Authors.id'])
->select(
'Authors.name','Authors.surname',
'Books.book_name','Books.book_description'
)
->get();
}

/**
*
@return array
*/
public function
headings(): array
{
return [
'Author Name',
'Author Surname',
'Book Name',
'Book Description',
];
}

/**
*
@return string
*/
public function
title(): string
{
return 'books';
}
}

Qeyd edim ki, heading methodun içindəki massiv sıralaması databazadan çəkdiyimiz (select) stün sırası ilə eyni olmalıdır ki, düzgün məlumat düzgün başlıq altında çıxsın.

Export class-ı hazır olduğuna görə qaldı onu çağırıb işlətmək. Hər hansı bir controller-də bir method yaradıb onun içində çağıra bilərik artıq.

public function export(BooksExport $booksExport)
{
return $booksExport->download('books.xls');
}

Bu qədər dostlar. Kodlar githuba da əlavə edilib. Oradan da baxa bilərsiniz daha ətraflı.

Məndən bu qədər dostlar. Happy coding zad :)

--

--