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:
