Take the Pain Out of Data Imports with Laravel Ingest

https://picperf.io/https://laravelnews.s3.amazonaws.com/featured-images/Laravel-Ingest-LN.png

Laravel Ingest by Robin Kopp is a configuration-driven ETL (Extract, Transform, Load) package that replaces one-off import scripts with declarative importer classes. It handles files from a few hundred to tens of millions of rows by processing them through PHP Generators and Laravel Queues, keeping memory usage consistent regardless of file size.

Main Features

  • Declarative importer classes using a fluent IngestConfig builder
  • Automatic resolution of BelongsTo and BelongsToMany relationships
  • Duplicate handling strategies: SKIP, CREATE, UPDATE, and UPDATE_IF_NEWER
  • Dry-run mode to validate imports before writing to the database
  • Failed row tracking with downloadable CSV exports
  • Column aliasing to map varying header names to a single field
  • Dynamic model resolution based on row data
  • Import sources: file upload, filesystem disks (including S3), URL, FTP, and SFTP
  • Auto-generated Artisan commands and REST API endpoints per importer

Defining an Importer

After installing the package and running migrations, you create an importer class that implements IngestDefinition and returns an IngestConfig. By convention, these live in the App\Ingest namespace:

namespace App\Ingest;

 

use App\Models\Product;

use LaravelIngest\Contracts\IngestDefinition;

use LaravelIngest\DTOs\IngestConfig;

use LaravelIngest\Enums\DuplicateStrategy;

use LaravelIngest\Enums\SourceType;

 

class ProductImporter implements IngestDefinition

{

public function getConfig(): IngestConfig

{

return IngestConfig::for(Product::class)

->fromSource(SourceType::UPLOAD)

->keyedBy('sku')

->onDuplicate(DuplicateStrategy::UPDATE)

->map('Product Name', 'name')

->relate('Category', 'category', Category::class, 'slug')

->validate([

'sku' => 'required|string',

'Product Name' => 'required|string|min:3',

]);

}

}

Register the importer in your AppServiceProvider using the package’s tag:

use LaravelIngest\IngestServiceProvider;

 

$this->app->tag([ProductImporter::class], IngestServiceProvider::INGEST_DEFINITION_TAG);

Running Imports

Once registered, the package exposes both an Artisan command and an HTTP endpoint for each importer.

Via CLI:

php artisan ingest:run product-importer --file=products.csv

Via API (multipart form upload):

POST /api/v1/ingest/upload/product-importer

For dry runs, append the --dry-run flag to the Artisan command to validate the file and surface any errors without touching the database.

Monitoring

The package includes several Artisan commands for checking on running or completed imports:

php artisan ingest:list # List registered importers

php artisan ingest:status {id} # Show progress and row statistics

php artisan ingest:cancel {id} # Stop an in-progress import

php artisan ingest:retry {id} # Reprocess only the failed rows

Equivalent REST endpoints are also available:

  • GET /api/v1/ingest — recent runs
  • GET /api/v1/ingest/{id} — status and statistics
  • GET /api/v1/ingest/{id}/errors/summary — aggregated error breakdown
  • GET /api/v1/ingest/{id}/failed-rows/download — CSV of rows that failed

Events

The package dispatches events throughout the import lifecycle — IngestRunStarted, ChunkProcessed, RowProcessed, IngestRunCompleted, and IngestRunFailed — which you can listen to for notifications or custom side effects.

You can find Laravel Ingest on GitHub and read the full documentation at the Laravel Ingest docs.

Laravel News

The New Live-Action ‘Moana’ Trailer Welcomes You to the Rock

https://gizmodo.com/app/uploads/2026/03/TheRockMoana-1280×853.jpg

Last year around this time, Disney’s live-action Lilo & Stitch was about to arrive, and fans wondered if the studio would be able to bounce back from its live-action Snow White stumble and resume its streak of hit remakes. And… yep, no problem there. So the live-action Moana will be diving into much safer waters when it arrives July 10, even if this latest trailer suggests it’s basically a shot-for-shot remake of the original film. That includes Dwayne Johnson as Maui, complete with animated tattoos.

There’s also plenty of built-in goodwill for Moana as a franchise, including its animated sequel, Moana 2, which was a smash hit in 2024 after being retooled from Disney+ series to theatrical film.

This new live-action take on Moana stars Catherine Lagaʻaia as Moana alongside Johnson, who also voiced Maui in the animated films.

Disney also shared a new featurette, “Artistry of Moana,” offering a behind-the-scenes peek at the film with director Thomas Kail as well as Laga’aia, Johnson, and the film’s costume designer and choreographer.

The rest of the cast includes John Tui as Moana’s father, Chief Tui; Frankie Adams as Moana’s mother, Sina; and Rena Owen as Moana’s Gramma Tala. Auli’i Cravalho, the voice of Moana in the animated films, is among Moana‘s executive producers. The film features original songs by Lin-Manuel Miranda, Opetaia Foaʻi, and Mark Mancina, and an original score composed by Mancina.

There’s also a new poster today:

Moana Poster
© Disney

Moana hits theaters July 10.

Want more io9 news? Check out when to expect the latest Marvel, Star Wars, and Star Trek releases, what’s next for the DC Universe on film and TV, and everything you need to know about the future of Doctor Who.

Gizmodo

A 1970s Leather-Topped Executive Desk with a Built-In Swappable Accessory Rail

https://s3files.core77.com/blog/images/1818845_81_142871_kHbNHRx8g.jpg

Though this was designed in the 1970s, this desk looks closer to modern-day furniture than say, a desk from the 1950s.

Danish designer Alex Linder’s Executive Desk has no drawers, and features a recessed aluminum rail that takes a variety of accessories: A desk lamp, a clock, a calendar, a countdown timer (presumably for meetings), little storage bins and, this being the ’70s, an ashtray.

The user chooses where to place the accessories within the rail.

The desk surface is leather, an unusual choice both now and then.

If this thing was height-adjustable and had appeared on a current-day Kickstarter, I wouldn’t bat an eye.

Core77

This self-hosted tool frees your Bambu Lab 3D printer from the cloud

https://static0.howtogeekimages.com/wordpress/wp-content/uploads/wm/2026/02/bambu-lab-p2s-3d-printer-handle-logo-closeup.jpg

Bambu Lab makes the most popular 3D printers in the world, earning a reputation for ease of use, reliability, and great value. But not everyone is in love with the company’s walled garden approach, which involves locking out third-party slicers and a heavy dependence on the cloud.

How-To Geek