Date
1 min read

Exporting large amounts of data in Laravel

Generally exporting large amounts of data should be done using a queue backend job service such as Redis or if it can’t be helped then a command that runs during times of less traffic.

When doing so via a command, it can be helpful to process Eloquent records using the chunk function, this preserves RAM. Filtered data can then be saved in memory as an array or collection, such as the below:

$modelsCount = Model::count();
$modelsReachingExpectation = collect();
$bar = $this->output->createProgressBar($modelsCount);

$bar->start();

Model::each(function (Model $model) use (&$bar, &$modelsReachingExpectation) {
	$bar->advance();

	// Condition to skip record.
	if (true) {
		continue;
	}

	$modelsReachingExpectation->push($model->getKey());
});

$bar->finish();

$this->line("\n");

$this->table([
	'Models reaching expectation',
	'Models not reaching expectation',
], [
	[
		$modelsReachingExpectation->count(),
		$modelsCount - $modelsReachingExpectation->count(),
	],
]);

// Perform export

$this->line("Exported models.\n");

In performing the export logic, the array of filtered results could then be passed to a dedicated job. An example could look like the below:

ModelProcessExport::dispatch($modelKeys);
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ModelProcessExport implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 
    /**
     * Create a new job instance.
     */
    public function __construct(
        public array $modelKeys,
    ) {}
 
    /**
     * Execute the job.
     */
    public function handle(): void
    {
		Model::findMany($this->modelKeys);
		
		// Perform export action...
    }
}

You might also like...

  • Read article

    How to save markdown using an editor and render it using Laravel

    How to setup a Laravel Markdown editor and convert the markdown to HTML easy.

  • Read article

    Simple breadcrumbs in Laravel

    Breadcrumbs are a crucial navigation element in web applications, providing users with a clear path to follow within your site's hierarchy. By the end, you'll have an easy-to-use breadcrumb system that enhances your site's user experience.

  • Read article

    Laravel Aliases

    Laravel aliases are shortcuts for long namespaces in your code. They make your code cleaner and more readable, enhancing developer productivity.

Let's work together 🤝

Line
Christopher Kelker

Chriscreates