Optimiza las inserciones masivas con el nuevo método fillAndInsert() de Laravel
- Publicado el 29 abril, 2025
- Palabras: 146
¿Insertas modelos Eloquent masivamente pero necesitas aplicar conversiones y marcas de tiempo? El nuevo método fillAndInsert() de Laravel ofrece una solución elegante al gestionar la conversión de modelos y la preparación de atributos durante la inserción masiva.

Al realizar inserciones masivas en Laravel, a menudo se enfrenta a un dilema: usar insert() para mayor eficiencia, pero perder la conversión de datos y la preparación de atributos de Eloquent, o crear y guardar modelos individuales para obtener la funcionalidad completa, pero sacrificar el rendimiento. El nuevo método fillAndInsert() soluciona este problema aplicando conversión de datos a nivel de modelo, marcas de tiempo y generación de UUID, manteniendo al mismo tiempo la eficiencia de las inserciones masivas.
Veamos cómo funciona:
User::fillAndInsert([
[
'name' => 'Taylor',
'email' => 'taylor@example.com',
'role' => UserRole::Admin,
],
[
'name' => 'Nuno',
'email' => 'nuno@example.com',
'role' => 3, // Will be cast to enum
],
]);
#Ejemplo práctico
Este método es particularmente valioso cuando se insertan registros en masa que necesitan aprovechar las capacidades de conversión de Eloquent, como conversiones de enumeración, conversiones de fecha o generación de UUID:
class Product extends Model
{
protected $fillable = [
'name', 'price', 'status', 'category_id', 'attributes'
];
protected function casts(): array
{
return [
'price' => 'decimal:2',
'status' => ProductStatus::class,
'attributes' => '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
Product::fillAndInsert([
[
'name' => 'Laptop Pro',
'price' => '1299.99',
'status' => ProductStatus::Available,
'attributes' => ['color' => 'silver', 'ram' => '16GB'],
],
[
'name' => 'Wireless Earbuds',
'price' => '199.50',
'status' => 'available', // String will be cast to enum
'attributes' => json_encode(['color' => 'black', 'battery' => '24h']), // String will be cast to array
],
[
'name' => 'Smart Watch',
'price' => 299,
'status' => 1, // Integer will be cast to enum
'attributes' => ['color' => 'blue', 'size' => 'medium'],
],
]);
Al aprovechar el nuevo método fillAndInsert(), puede escribir un código de inserción masiva más limpio y consistente y, al mismo tiempo, beneficiarse de las potentes capacidades de preparación de atributos y conversión de Eloquent.

Desarrollador backend especializado en PHP y Laravel, con sede en Santander, Cantabria. Más de 15 años de experiencia en el desarrollo de aplicaciones web a medida y en la modernización de código heredado.
Fuente: Harris Raftopoulos
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión