Laravel: Seeders (parte 9)
Archivos que vamos a tratar
- /database/seeders/DatabaseSeeder.php
- /migrations
Rellenaremos la base de datos con datos de prueba para hacer consultas con Eloquent.
Antes de crear Seeders y Factories, ejecutamos este comando:
php artisan migrate:reset
Esto eliminará todas las tablas de la base de datos. Lo hacemos porque vamos a eliminar las migraciones que creamos en el capítulo anterior, y vamos a agregar una columna a la tabla cursos manualmente, añadimos una columna llamada «categoría»:
public function up()
{
Schema::create('cursos', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->text('description');
$table->text('categoria'); // nueva columna
$table->timestamps();
});
}
Luego abrimos el archivo DatabaseSeeder.php. Tenemos que escribir al principio de este archivo que estamos usando el modelo Curso:
use Illuminate\Database\Console\Seeds\WithoutModelEvents;
use Illuminate\Database\Seeder;
use App\Models\Curso; // añadimos esta línea
Y dentro de la función run() escribimos lo que practicábamos con Tinker en la lección anterior, para crear un registro:
public function run()
{
$curso = new Curso();
$curso->name('Laravel');
$curso->description('El mejor Framework');
$curso->categoria('Desarrollo web');
$curso->save();
}
Podemos ejecutar el comando fresh para que se borren y se creen todas las tablas de nuevo:
php artisan migrate:fresh
Y luego ejecutamos los seeders:
php artisan db:seed
Ya se ha añadido el primer registro. Añadamos tres a la vez:
public function run()
{
$curso = new Curso();
$curso->name='Laravel';
$curso->description='El mejor Framework';
$curso->categoria='Desarrollo web';
$curso->save();
$curso2 = new Curso();
$curso2->name='Laravel';
$curso2->description='El mejor Framework';
$curso2->categoria='Desarrollo web';
$curso2->save();
$curso3 = new Curso();
$curso3->name='Laravel';
$curso3->description='El mejor Framework';
$curso3->categoria='Desarrollo web';
$curso3->save();
}
Ejecutamos de nuevo los comandos para tener más registros en la base de datos:
php artisan migrate:fresh
php artisan db:seed
Pero lo podemos hacer mejor, creando un seeder para los cursos:
php artisan make:seeder CursoSeeder
Dentro del archivo CursoSeeder, pegamos los registros que creamos en DatabaseSeeder. Además, llamamos al modelo Curso como lo hicimos allí también. Y en DatabaseSeeder, en vez de la creación de registros de la función pública run (que ahora está en CursoSeeder):
$this->Call(CursoSeeder::class);
Ahora ejecutamos los dos comandos de artisan fresh y seed, pero esta vez lo haremos en una sola línea:
php artisan migrate:fresh --seed
Recursos
Enlace de Youtube: https://www.youtube.com/watch?v=zNTF3U2Hsq0&list=PLZ2ovOgdI-kWWS9aq8mfUDkJRfYib-SvF&index=13
Seeders con tablas relacionadas: https://www.php-dev-zone.com/blog/seeding-table-with-relationships-in-laravel-8