Como importar e exportar arquivos csv ou .xlsx para o banco de dados no laravel
Para importar e exportar arquivos CSV ou Excel (XLSX) para o banco de dados no Laravel, você pode usar o pacote Laravel Excel que fornece uma API poderosa para lidar com arquivos Excel e CSV.
1. Instalação do Laravel Excel
Primeiro, instale o pacote utilizando o Composer:
composer require maatwebsite/excel
Após a instalação, registre o ServiceProvider
no Laravel (se você estiver usando uma versão antiga do Laravel, pois, a partir do Laravel 5.5, o pacote é registrado automaticamente):
// config/app.php
'providers' => [
...
Maatwebsite\Excel\ExcelServiceProvider::class,
],
Opcionalmente, adicione a facade ao seu arquivo config/app.php
:
'aliases' => [
...
'Excel' => Maatwebsite\Excel\Facades\Excel::class,
],
Publique o arquivo de configuração:
php artisan vendor:publish --provider="Maatwebsite\Excel\ExcelServiceProvider"
2. Configuração do Banco de Dados
Certifique-se de que o banco de dados esteja configurado corretamente no arquivo .env
e que você tenha a tabela onde os dados serão importados.
3. Criando a Tabela
Se você ainda não tem uma tabela para armazenar os dados importados, crie uma migration:
php artisan make:migration create_users_table --create=users
No arquivo da migration (database/migrations/<timestamp>_create_users_table.php
), adicione os campos que você deseja importar/exportar:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->string('phone')->nullable();
$table->timestamps();
});
}
Execute a migration:
php artisan migrate
4. Importando Arquivos (CSV ou Excel)
Criar uma Classe de Importação
Crie uma classe para gerenciar a lógica de importação:
php artisan make:import UsersImport --model=User
Edite o arquivo app/Imports/UsersImport.php
:
<?php
namespace App\Imports;
use App\Models\User;
use Maatwebsite\Excel\Concerns\ToModel;
class UsersImport implements ToModel
{
/**
* Cada linha do arquivo será convertida em uma instância de User.
*/
public function model(array $row)
{
return new User([
'name' => $row[0], // Nome na primeira coluna do arquivo
'email' => $row[1], // Email na segunda coluna do arquivo
'phone' => $row[2] ?? null, // Telefone na terceira coluna (opcional)
]);
}
}
Criar um Controlador para Importação
Crie um controlador para importar os arquivos:
php artisan make:controller ImportController
Edite o arquivo app/Http/Controllers/ImportController.php
:
<?php
namespace App\Http\Controllers;
use App\Imports\UsersImport;
use Illuminate\Http\Request;
use Maatwebsite\Excel\Facades\Excel;
class ImportController extends Controller
{
public function showImportForm()
{
return view('import');
}
public function import(Request $request)
{
$request->validate([
'file' => 'required|mimes:csv,xlsx|max:2048',
]);
Excel::import(new UsersImport, $request->file('file'));
return back()->with('success', 'Arquivo importado com sucesso!');
}
}
Criar a Rota
Adicione as rotas em routes/web.php
:
use App\Http\Controllers\ImportController;
Route::get('/import', [ImportController::class, 'showImportForm']);
Route::post('/import', [ImportController::class, 'import']);
Criar a View para Upload do Arquivo
Crie um formulário em resources/views/import.blade.php
para permitir o envio do arquivo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Importar Arquivo</title>
</head>
<body>
<h1>Importar Arquivo CSV ou Excel</h1>
@if(session('success'))
<p style="color: green;">{{ session('success') }}</p>
@endif
@if($errors->any())
<ul>
@foreach($errors->all() as $error)
<li style="color: red;">{{ $error }}</li>
@endforeach
</ul>
@endif
<form action="/import" method="POST" enctype="multipart/form-data">
@csrf
<label for="file">Escolha o arquivo:</label>
<input type="file" name="file" id="file" required>
<button type="submit">Importar</button>
</form>
</body>
</html>
Agora você pode acessar http://localhost/import
para importar os arquivos.
5. Exportando Arquivos (CSV ou Excel)
Criar uma Classe de Exportação
Crie uma classe para exportar os dados:
php artisan make:export UsersExport --model=User
Edite o arquivo app/Exports/UsersExport.php
:
<?php
namespace App\Exports;
use App\Models\User;
use Maatwebsite\Excel\Concerns\FromCollection;
class UsersExport implements FromCollection
{
/**
* Retorna os dados que serão exportados.
*/
public function collection()
{
return User::all(); // Exporta todos os usuários
}
}
Criar um Controlador para Exportação
Adicione o método de exportação no controlador:
<?php
namespace App\Http\Controllers;
use App\Exports\UsersExport;
use Maatwebsite\Excel\Facades\Excel;
class ExportController extends Controller
{
public function export()
{
return Excel::download(new UsersExport, 'users.xlsx'); // ou 'users.csv'
}
}
Criar a Rota
Adicione a rota de exportação em routes/web.php
:
use App\Http\Controllers\ExportController;
Route::get('/export', [ExportController::class, 'export']);
Agora você pode acessar http://localhost/export
para exportar os dados.
6. Testar Importação e Exportação
- Importação: Acesse
http://localhost/import
, envie um arquivo CSV ou XLSX no formato adequado (por exemplo:name,email,phone
) e clique em “Importar”. - Exportação: Acesse
http://localhost/export
para baixar os dados salvos no banco de dados em formato Excel ou CSV.
7. Observações e Melhorias
- Validação do Formato do Arquivo: Certifique-se de que os dados no arquivo têm o formato correto antes de importá-los.
- Filtrar Dados para Exportação: Se necessário, personalize a lógica em
UsersExport
para exportar apenas os dados relevantes. - Paginação para Grandes Arquivos: Para exportar grandes volumes de dados, use o recurso de chunk do Laravel Excel para evitar problemas de memória:
use Maatwebsite\Excel\Concerns\FromQuery;
use Maatwebsite\Excel\Concerns\Exportable;
class UsersExport implements FromQuery
{
use Exportable;
public function query()
{
return User::query();
}
}
- Mensagens Personalizadas: Mostre mensagens de erro/sucesso personalizadas para o usuário em caso de falha.
Com isso, você terá uma solução completa para importar e exportar arquivos CSV e Excel no Laravel.