Estamos actualizando el sitio. Durante unos días es posible que veas fallos de diseño o de traducción. La documentación sigue disponible: si una página se ve mal, recárgala más tarde.

Inicio Laravel 10.x Base de datos: Seeders

Base de datos: Seeders

10.x 7 de mar. de 2026

#Introducción

Laravel incluye la capacidad de poblar su base de datos con datos usando clases seeders. Todas las clases seeders se almacenan en el directorio database/seeders. Por defecto, se define una clase DatabaseSeeder para usted. Desde esta clase, puede usar el método call para ejecutar otras clases seeders, lo que le permite controlar el orden de la siembra.

Примечание

La protección contra asignación masiva se desactiva automáticamente durante la siembra de la base de datos.

#Escribiendo Seeders

Para generar un seeder, ejecute el comando Artisan make:seeder. Todos los seeders generados por el framework se colocarán en el directorio database/seeders:

php artisan make:seeder UserSeeder

Una clase seeder contiene por defecto solo un método: run. Este método se llama cuando se ejecuta el comando Artisan db:seed. Dentro del método run, puede insertar datos en su base de datos como desee. Puede usar el query builder para insertar datos manualmente o puede usar Eloquent model factories.

Como ejemplo, modifiquemos la clase DatabaseSeeder por defecto y añadamos una instrucción de inserción en la base de datos dentro del método run:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Str;

class DatabaseSeeder extends Seeder
{
    /**
     * Ejecutar los seeders de la base de datos.
     */
    public function run(): void
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@example.com',
            'password' => Hash::make('password'),
        ]);
    }
}
Примечание

Puede indicar cualquier dependencia que necesite en la firma del método run. Estas se resolverán automáticamente a través del service container de Laravel.

#Usando Model Factories

Por supuesto, especificar manualmente los atributos para cada modelo en el seeder es tedioso. En su lugar, puede usar model factories para generar cómodamente grandes cantidades de registros en la base de datos. Primero, revise la documentación de model factories para aprender cómo definir sus factories.

Por ejemplo, creemos 50 usuarios, cada uno con un post relacionado:

use App\Models\User;

/**
 * Ejecutar los seeders de la base de datos.
 */
public function run(): void
{
    User::factory()
            ->count(50)
            ->hasPosts(1)
            ->create();
}

#Llamando Seeders adicionales

Dentro de la clase DatabaseSeeder, puede usar el método call para ejecutar clases seeders adicionales. Usar el método call le permite dividir la siembra de la base de datos en múltiples archivos para que ninguna clase seeder sea demasiado grande. El método call acepta un arreglo de clases seeders que deben ejecutarse:

/**
 * Ejecutar los seeders de la base de datos.
 */
public function run(): void
{
    $this->call([
        UserSeeder::class,
        PostSeeder::class,
        CommentSeeder::class,
    ]);
}

#Silenciando eventos de modelos

Al ejecutar seeders, puede que desee evitar que los modelos disparen eventos. Puede lograr esto usando el trait WithoutModelEvents. Cuando se usa, el trait WithoutModelEvents asegura que no se disparen eventos de modelos, incluso si se ejecutan clases seeders adicionales mediante el método call:

<?php

namespace Database\Seeders;

use Illuminate\Database\Seeder;
use Illuminate\Database\Console\Seeds\WithoutModelEvents;

class DatabaseSeeder extends Seeder
{
    use WithoutModelEvents;

    /**
     * Ejecutar los seeders de la base de datos.
     */
    public function run(): void
    {
        $this->call([
            UserSeeder::class,
        ]);
    }
}

#Ejecutando Seeders

Puede ejecutar el comando Artisan db:seed para sembrar su base de datos. Por defecto, el comando db:seed ejecuta la clase Database\Seeders\DatabaseSeeder, que a su vez puede invocar otras clases seeders. Sin embargo, puede usar la opción --class para especificar una clase seeder específica para ejecutar individualmente:

php artisan db:seed

php artisan db:seed --class=UserSeeder

También puede sembrar su base de datos usando el comando migrate:fresh en combinación con la opción --seed, que eliminará todas las tablas y volverá a ejecutar todas sus migraciones. Este comando es útil para reconstruir completamente su base de datos. La opción --seeder puede usarse para especificar un seeder específico para ejecutar:

php artisan migrate:fresh --seed

php artisan migrate:fresh --seed --seeder=UserSeeder 

#Forzar la ejecución de Seeders en producción

Algunas operaciones de siembra pueden causar que modifique o pierda datos. Para protegerlo de ejecutar comandos de siembra en su base de datos de producción, se le pedirá confirmación antes de que los seeders se ejecuten en el entorno production. Para forzar la ejecución de los seeders sin una confirmación, use la bandera --force:

php artisan db:seed --force