Streamline Mass Insertions with Laravel's fillAndInsert() Method
Last updated on by Harris Raftopoulos

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 generationInvoice::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.