Laravel ile Excel Import ve Export İşlemleri
Merhaba arkadaşlar Laravel ile Excel'e veri Export etme ve hazırladığımız bir veriyi Excel'den Import etme işlemleri nasıl yapılır sorularına cevap arayıp öğreneceğiz. Bir çok alanda işimizi kolaylaştıran Excel import ve export işlemleri Laravelde oldukça kolay şekilde yapılıyor. Composer aracılığıyla yapacağımız bu işlemleri inceleyelim.
Laravel'de Excel İşlemleri
Öncelikle composer kurulumunu şu komutla gerçekleştiriyoruz.
composer require maatwebsite/excel
Ardından;
php artisan make:import YaziImport
app/Imports/YaziImport.php bu dizine import klasörünün altına verdiğimiz isimle dosyamızı oluşturuyoruz.
//YaziImport
<?php
namespace App\Imports;
use App\Models\Yazilar;
use Maatwebsite\Excel\Concerns\ToModel;
use Maatwebsite\Excel\Concerns\WithHeadingRow;
class UsersImport implements ToModel, WithHeadingRow
{
/**
* @param array $row
*
* @return \Illuminate\Database\Eloquent\Model|null
*/
public function model(array $row)
{
return new Yazilar([
'title' => $row['title'],
'description' => $row['description'],
]);
}
}
şeklinde yukarıda kendi Model sayfamızı dahil etmeyi unutmadan bu kodları YaziImport
dosyamıza yazıyoruz.
Daha sonra export edeceğimiz sayfayı hazırlamak için şu kodları uyguluyoruz
php artisan make:export YaziExport
app/Exports/YaziExport.php sonrasında da aşağıdaki kodları oluşturduğumuz sayfaya yazıyoruz.
//app/Exports/YaziExport.php
<?php
namespace App\Exports;
use App\Models\Yazilar;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
class UsersExport implements FromCollection, WithHeadings
{
/**
* @return \Illuminate\Support\Collection
*/
public function collection()
{
return Yazi::select("id", "title", "description")->get();
}
/**
* Write code on Method
*
* @return response()
*/
public function headings(): array
{
return ["ID", "Title", "Description"];
}
}
Ardından Controller dosyamız var ise mevcur Controller'a yok ise;
php artisan make:controller HomeController
şeklinde controller dosyamızı oluşturduktan sonra;
//HomeController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Exports\YaziExport;
use App\Imports\YaziImport;
use Maatwebsite\Excel\Facades\Excel;
use App\Models\Yazilar;
class UserController extends Controller
{
/**
* @return \Illuminate\Support\Collection
*/
public function index()
{
$yazilar = Yazilar::get();
return view('yazilar', compact('yazilar'));
}
/**
* @return \Illuminate\Support\Collection
*/
public function export()
{
return Excel::download(new YaziExport, 'yazilar.xlsx');
}
/**
* @return \Illuminate\Support\Collection
*/
public function import()
{
Excel::import(new YaziImport,request()->file('file'));
return back();
}
}
şeklinde kodlarımızı düzenleyelim.
routes/web.php sayfamıza şu kod bloğumuzda yazalım.
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
/*
|--------------------------------------------------------------------------
| 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(HomeController::class)->group(function(){
Route::get('yazilar', 'index');
Route::get('yazilar-export', 'export')->name('yazilar.export');
Route::post('yazilar-import', 'import')->name('yazilar.import');
});
Ardından blade sayfamızı oluşturalım. resources/views/yazilar.blade.php
//resources/views/yazilar.blade.php
<!DOCTYPE html>
<html>
<head>
<title>Laravel 10 Excel Import Export Database - tenik.net</title>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/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 Excel Import Export Database - tenik.net
</div>
<div class="card-body">
<form action="{{ route('yazilar.import') }}" method="POST" enctype="multipart/form-data">
@csrf
<input type="file" name="file" class="form-control">
<br>
<button class="btn btn-success">Import Yazi 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('yazilar.export') }}">Export Yazi Data</a>
</th>
</tr>
<tr>
<th>ID</th>
<th>Title</th>
<th>Description</th>
</tr>
@foreach($yazilar as $yazi)
<tr>
<td>{{ $yazi->id }}</td>
<td>{{ $yazi->title }}</td>
<td>{{ $yazi->description }}</td>
</tr>
@endforeach
</table>
</div>
</div>
</div>
</body>
</html>
blade sayfamızı da oluşturduk.
Ardından serve işlemini yapalım ;
php artisan serve
Ve localhost'ta şu adrese gidelim.
http://localhost:8000/yazilar
şeklinde çalıştıralım eğer veritabanımızda kayıtlı veriler var ise aşağıdaki şekilde görüntüleyeceğiz. Yok ise de gerekli başlık düzenlemeleri ile excel import ederek test edebilir ve görüntüleyebilirsiniz.
E-Bültenime Abone Ol
Anahtar Kelimeler: Laravel,Excel çıktısı
Yazan: Emre TENİK
Bu yazı: 244 kez okundu