Laravel Tutorials

Streamline Mass Insertions with Laravel's fillAndInsert() Method

Published
Streamline Mass Insertions with Laravel's fillAndInsert() Method image

Laravel introduces the fillAndInsert() method to solve a common dilemma in Eloquent bulk operations. This feature applies model-level casting and attribute preparation during mass insertion, eliminating the traditional trade-off between performance and functionality.

Developers working with bulk insertions typically faced a choice: use insert() for speed but lose Eloquent's powerful features, or create individual models for full functionality at the cost of performance. The fillAndInsert() method delivers both benefits by applying proper casting, timestamps, and attribute preparation while maintaining efficient bulk insertion:

User::fillAndInsert([
    [
        'name' => 'Taylor',
        'email' => 'taylor@example.com',
        'role' => UserRole::Admin,
    ],
    [
        'name' => 'Nuno',
        'email' => 'nuno@example.com',
        'role' => 3, // Will be cast to enum
    ],
]);

This method particularly shines when working with models that utilize Eloquent's casting capabilities:

class Invoice extends Model
{
    protected $fillable = [
        'number', 'amount', 'status', 'client_id', 'metadata'
    ];
    
    protected function casts(): array
    {
        return [
            'amount' => 'decimal:2',
            'status' => InvoiceStatus::class,
            'metadata' => 'array',
            'id' => 'string',
        ];
    }
    
    public static function boot()
    {
        parent::boot();
        
        static::creating(function ($model) {
            if (empty($model->id)) {
                $model->id = Str::uuid();
            }
        });
    }
}

// Bulk insert with proper casting and UUID generation
Invoice::fillAndInsert([
    [
        'number' => 'INV-2023-001',
        'amount' => '1450.75',
        'status' => InvoiceStatus::Paid,
        'metadata' => ['payment_method' => 'credit_card', 'ref' => 'TX12345'],
    ],
    [
        'number' => 'INV-2023-002',
        'amount' => '299.99',
        'status' => 'pending', // String will be cast to enum
        'metadata' => json_encode(['payment_method' => 'bank_transfer', 'ref' => 'BT54321']), // String will be cast to array
    ],
    [
        'number' => 'INV-2023-003',
        'amount' => 750,
        'status' => 0, // Integer will be cast to enum
        'metadata' => ['payment_method' => 'paypal', 'ref' => 'PP98765'],
    ],
]);

The fillAndInsert() method enables developers to maintain clean, consistent code patterns while benefiting from both Eloquent's sophisticated casting capabilities and the performance advantages of bulk operations. This addition represents a significant quality-of-life improvement for Laravel developers working with large datasets.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

laravelcloud logo
Laravel Cloud

Easily create and manage your servers and deploy your Laravel applications in seconds.

Visit Laravel Cloud

The latest

View all →
UUID Request Input and Migration Failure Events in Laravel 13.42 image

UUID Request Input and Migration Failure Events in Laravel 13.42

Read article
Replay Missed Laravel Scheduled Tasks With Schedule Catchup image

Replay Missed Laravel Scheduled Tasks With Schedule Catchup

Read article
Search Polymorphic Relations and Filament Tables With Laravel Searchable image

Search Polymorphic Relations and Filament Tables With Laravel Searchable

Read article
Laravel Rest Api 3.0: Typed Fields, Metrics, and OpenAPI Docs image

Laravel Rest Api 3.0: Typed Fields, Metrics, and OpenAPI Docs

Read article
Real-Time Inertia Props With Laravel Reverb image

Real-Time Inertia Props With Laravel Reverb

Read article
PhpStorm 2026.3 Adds an Agent Workspace and PHP 8.6 Support image

PhpStorm 2026.3 Adds an Agent Workspace and PHP 8.6 Support

Read article