Laravel 8 desde cero Parte VI - creando seeders o semilleros
Introducción
Creando modelo, migración y semilleros fijos para Tema y Roll
Para crear el modelo, la migración, y semilleros fijos. Ejecutamos los comandos:
php artisan make:model Tema -m
php artisan make:model Roll -m
php artisan make:seeder TemasTableSeeder
php artisan make:seeder RollsTableSeeder
php artisan make:seeder UsersTableSeeder
Para el modelo 'App\Models\Tema.php', agregamos el código:
protected $fillable = [ 'nombretema', ];
Y en la migración 'Database\Migrations\2020_10_24_030311_create_temas_table.php', entre el id y el timestamp:
$table->string('nombretema');
En el semillero 'Database\Seeders\TemasTableSeeder.php', agregamos:
use App\Models\Tema;
Y en el run:
Tema::create(["nombretema" => "HTML"]);
Tema::create(["nombretema" => "Css"]);
Tema::create(["nombretema" => "PHP"]);
Tema::create(["nombretema" => "Javascript"]);
Tema::create(["nombretema" => "Laravel"]);
Para el modelo 'App\Models\Roll.php', agregamos el código:
protected $fillable = ['roll_id', 'roll_name',];
Y en la migración 'Database\Migrations\2020_10_24_030329_create_rolls_table.php', entre el id y el timestamp:
$table->unsignedBigInteger('roll_id');
$table->string('roll_name');
En el semillero 'Database\Seeders\RoolsTableSeeder.php', agregamos:
use App\Models\Roll;
Y en el run:
Roll::create(["roll_id" => 1, "roll_name" => "Estudiante"]);
Roll::create(["roll_id" => 2, "roll_name" => "Editor"]);
Roll::create(["roll_id" => 3, "roll_name" => "Administrador de Roles"]);
Roll::create(["roll_id" => 4, "roll_name" => "Administrador de proyectos"]);
Roll::create(["roll_id" => 5, "roll_name" => "Superusuario"]);
Para el semillero fijo de usuarios 'Database\Seeders\UsersTableSeeder.php', agregamos:
use App\Models\User;
Y en el run:
User::create(["name" => "Luis Gabriel", "email" => "luisga@email.com", "password" => '$2y$10$z8am7QpsiOP7Fd1rNHdgLOryA6JYshcppMtiFOxZ96WvVNgDNtV2q']);
User::create(["name" => "LuisN", "email" => "email@email.com", "password" => "$2y$10$z8am7QpsiOP7Fd1rNHdgLOryA6JYshcppMtiFOxZ96WvVNgDNtV2q"]);
User::create(["name" => "LuisN2", "email" => "email2@email.com", "password" => "$2y$10$z8am7QpsiOP7Fd1rNHdgLOryA6JYshcppMtiFOxZ96WvVNgDNtV2q"]);
El password viene codificado, por lo cual es necesario crear un usuario con una contraseña para copiar el password codificado de la base de datos, para el ejemplo el password es '12341234'.
Creando semillero aleatorio para Post
Un Factory permite agregar datos sin un semillero, vamos al archivo 'Database\Factories\PostFactory.php'
El cual como se explicó en el artículo anterior se creó al usar el comando:
php artisan make:model Post -mf
En caso de no haberlo creado inicialmente usar el comando:
php artisan make:factory Post
Agregamos al archivo 'Database\Factories\PostFactory.php'
use App\Models\User;
Y dentro de la función definition agregamos:
$count = User::count();
Y en el array return agregamos:
'user_id' => $this->faker->numberBetween(1, $count),
'title' => $this->faker->text($maxNbChars = 100),
'content' => $this->faker->text($maxNbChars = 1000),
Registrando los semilleros fijos, y aleatorios
Y creando función para limpiar tablas.
Vamos al archivo 'Database\Seeders\DatabaseSeeder' y agregamos:
use Illuminate\Support\Facades\DB;
Y para el factory de Post:
use Illuminate\Database\Eloquent\Factories\Factory;
Creamos después de la función run:
DB::statement('SET FOREIGN_KEY_CHECKS = 0;');
foreach ($tables as $table){
DB::table($table)->truncate();
}
DB::statement('SET FOREIGN_KEY_CHECKS = 1;');
}
Y en la función run agregamos los semilleros que queremos alimentar:
$this->call(TemasTableSeeder::class);
$this->truncateTables(['temas']);
$this->call(TemasTableSeeder::class);
$this->truncateTables(['rolls']);
$this->call(RollsTableSeeder::class);
$this->truncateTables(['posts']);
Post::factory()->times(50)->create();
Vemos como Post utiliza el factory para la creación del semillero, sin necesidad de un Seed.
Por último eliminamos las tablas de la base de datos, y ejecutamos la migración (comando encargado de crear las tablas) y la alimentación de las tablas con los semilleros con los siguientes comandos.
php artisan migrate
php artisan db:seed
Observaciones:
- Al alimentar la tabla de usuarios de esta forma, al ingresar nos muestra la vista home, sin embargo al ir a las demás opciones, pide la verificación del correo, lo cual ha sido previsto, con un enlace que envía el correo.
- Si queremos que home también requiera de verificación, debemos ir al archivo 'web.php', y colocar la ruta home, dentro del grupo que exige dicha verificación, y cuyo código es 'Route::group(['middleware' => 'verified'], function(){}'.
Comentarios
Publicar un comentario