Laravel developers often need to export data to CSV files for reporting or analysis. This article presents an efficient and straightforward method for creating a Laravel CSV export command, utilizing Laravel's chunking and PHP's fputcsv
function for optimal performance with large datasets.
This approach offers several key advantages:
fputcsv
provides direct CSV formatting, eliminating the need for external libraries.The following code demonstrates a concise CSV export:
<code class="language-php">use Illuminate\Database\Eloquent\Collection; $chunkSize = 500; // Adjustable chunk size $outputStream = fopen('php://stdout', 'wb+'); // Output stream to stdout // Write CSV header row fputcsv($outputStream, ['email', 'name']); // Chunk-based data processing and export User::select(['email', 'name']) ->chunk($chunkSize, function (Collection $users) use ($outputStream) { $users->each(function ($user) use ($outputStream) { fputcsv($outputStream, [$user->email, $user->name]); }); });</code>
$chunkSize = 500;
: Sets the number of records processed per chunk. Adjust as needed based on your data volume and server resources.
$outputStream = fopen('php://stdout', 'wb ');
: Opens a write-binary stream to standard output (stdout
). This allows direct piping of the output to a file or other processes.
fputcsv($outputStream, ['email', 'name']);
: Writes the CSV header row.
User::select(['email', 'name'])->chunk($chunkSize, ...);
: Laravel's chunk
method processes the User
model data in chunks of $chunkSize
records. The anonymous function within chunk
handles each chunk.
$users->each(function ($user) use ($outputStream) { ... });
: Iterates through each user in the chunk and writes the email and name to the CSV using fputcsv
.
To create a reusable Artisan command, structure your code as follows:
<code class="language-php"><?php namespace App\Console\Commands; use Illuminate\Console\Command; use Illuminate\Database\Eloquent\Collection; use App\Models\User; class ExportUsersToCsv extends Command { protected $signature = 'export:users'; protected $description = 'Export users to CSV'; public function handle() { // ... (Code from previous example) ... } }</code>
This creates an Artisan command php artisan export:users
to execute the export.
This method provides an efficient and scalable solution for CSV export in Laravel, leveraging built-in functionalities for optimal performance and ease of implementation. Remember to adjust the $chunkSize
variable according to your specific needs.
The above is the detailed content of Building a Quick CSV Export Command in Laravel. For more information, please follow other related articles on the PHP Chinese website!