Documentación de Laravel 10.x
Aquí encontrarás fragmentos de código de Laravel y consejos útiles sobre desarrollo web.
Laravel incluye la capacidad de sembrar tu base de datos con datos mediante clases de semillas. Todas las clases de semillas se almacenan en el directorio database/seeders
. Por defecto, se define una clase DatabaseSeeder
para ti. Desde esta clase, puedes usar el método call
para ejecutar otras clases de semillas, lo que te permite controlar el orden de siembra.
Nota La protección contra asignación masiva se desactiva automáticamente durante la siembra de la base de datos.
Para generar una clase de semilla, ejecuta el comando Artisan make:seeder
. Todas las clases de semillas generadas por el framework se colocarán en el directorio database/seeders
:
php artisan make:seeder UserSeeder
Una clase de semilla solo contiene un método por defecto: run
. Este método se llama cuando se ejecuta el comando Artisan db:seed
. Dentro del método run
, puedes insertar datos en tu base de datos como desees. Puedes usar el constructor de consultas para insertar datos manualmente o puedes usar fábricas de modelos Eloquent.
Como ejemplo, modifiquemos la clase DatabaseSeeder
predeterminada y agreguemos una declaración de inserción en la base de datos al 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{ /** * Ejecuta los sembradores de la base de datos. */ public function run(): void { DB::table('users')->insert([ 'name' => Str::random(10), 'email' => Str::random(10).'@gmail.com', 'password' => Hash::make('password'), ]); }}
Nota Puedes hacer una sugerencia de tipo para cualquier dependencia que necesites dentro de la firma del método
run
. Se resolverán automáticamente a través del contenedor de servicios de Laravel.
Por supuesto, especificar manualmente los atributos para cada semilla de modelo es engorroso. En su lugar, puedes usar fábricas de modelos para generar convenientemente grandes cantidades de registros de bases de datos. Primero, revisa la documentación de las fábricas de modelos para aprender cómo definir tus fábricas.
Por ejemplo, creemos 50 usuarios, cada uno con un post relacionado:
use App\Models\User; /** * Ejecuta los sembradores de la base de datos. */public function run(): void{ User::factory() ->count(50) ->hasPosts(1) ->create();}
Dentro de la clase DatabaseSeeder
, puedes usar el método call
para ejecutar clases de semillas adicionales. El uso del método call
te permite dividir tu siembra de bases de datos en varios archivos para que ninguna clase de semilla sea demasiado grande. El método call
acepta un array de clases de semillas que deben ejecutarse:
/** * Ejecuta los sembradores de la base de datos. */public function run(): void{ $this->call([ UserSeeder::class, PostSeeder::class, CommentSeeder::class, ]);}
Mientras se ejecutan las semillas, es posible que desees evitar que los modelos envíen eventos. Puedes lograr esto utilizando el rasgo WithoutModelEvents
. Cuando se usa, el rasgo WithoutModelEvents
garantiza que no se envíen eventos de modelo, incluso si se ejecutan clases de semillas 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; /** * Ejecuta los sembradores de la base de datos. */ public function run(): void { $this->call([ UserSeeder::class, ]); }}
Puedes ejecutar el comando Artisan db:seed
para sembrar tu base de datos. Por defecto, el comando db:seed
ejecuta la clase Database\Seeders\DatabaseSeeder
, que a su vez puede invocar otras clases de semillas. Sin embargo, puedes usar la opción --class
para especificar una clase de semilla específica para ejecutar de forma individual:
php artisan db:seed php artisan db:seed --class=UserSeeder
También puedes sembrar tu 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 tus migraciones. Este comando es útil para reconstruir completamente tu base de datos. La opción --seeder
se puede utilizar para especificar una semilla específica para ejecutar:
php artisan migrate:fresh --seed php artisan migrate:fresh --seed --seeder=UserSeeder
Algunas operaciones de siembra pueden provocar la modificación o pérdida de datos. Para protegerte de ejecutar comandos de siembra en tu base de datos de producción, se te pedirá confirmación antes de ejecutar las semillas en el entorno production
. Para forzar la ejecución de las semillas sin un aviso, utiliza la bandera --force
:
php artisan db:seed --force