Skip to content
You're reading the docs for Laravel Excel CSV 1.0. The current version is Laravel Excel 4.x (upgrade guide).

Queued ​

In case you are working with a lot of data, it might be wise to queue the entire process.

Create a new class called UsersExport in app/Exports:

. ├── app │   ├── Exports │   │   ├── UsersExport.php

php
<?php

namespace App\Exports;

use App\User;
use Illuminate\Contracts\Queue\ShouldQueue;
use Maatwebsite\LaravelCsv\Concerns\FromQuery;

class UsersExport implements FromQuery, ShouldQueue
{
    public function query()
    {
        return User::query();
    }
}

In your controller we can now queue this export:

php
use App\Exports\UsersExport;
use App\Http\Controllers\Controller;
use Maatwebsite\LaravelCsv\Facades\Csv;

class UsersController extends Controller 
{
    public function export() 
    {
        Csv::queue(new UsersExport, 'users.csv');
    }
}

Appending jobs ​

The same configuration for chunking as with FromQuery applies here as well. The difference is that the queue method will always return a PendingDispatch instance. This allows you to add additional jobs to the existing chain.

php
use App\Exports\UsersExport;
use App\Http\Controllers\Controller;
use Maatwebsite\LaravelCsv\Facades\Csv;

class UsersController extends Controller 
{
    public function export() 
    {
        $queuedJob = Csv::queue(new UsersExport, 'users.csv');
        $queuedJob->chain([
            new AfterQueueExportJob(),
        ]);
    }
}

If you use the store method instead of the queue method, but the export class implements ShouldQueue, then Csv::store will still return a PendingDispatch instance, so this will still work:

php
use App\Exports\UsersExport;
use App\Http\Controllers\Controller;
use Maatwebsite\LaravelCsv\Facades\Csv;

class UsersController extends Controller 
{
    public function export() 
    {
        $queuedJob = Csv::store(new UsersExport, 'users.csv');
        $queuedJob->chain([
            new AfterQueueExportJob(),
        ]);
    }
}