"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Cómo generar datos fácilmente con Database Seeders en Laravel

Cómo generar datos fácilmente con Database Seeders en Laravel

Publicado el 2024-07-31
Navegar:265

How to easily generate data with Database Seeders in Laravel

Al crear una aplicación, ya sea pequeña, mediana o grande. Tener datos de prueba para jugar en una aplicación es inevitable e importante.

Así que comencemos desde lo simple hasta lo avanzado con dos escenarios diferentes.

i. Todas las aplicaciones o la mayoría de las aplicaciones deben tener usuarios. A veces, queremos clasificar/etiquetar a los usuarios como Administrador o Usuarios normales. Entonces, generemos una sembradora simple con 100 usuarios con las especificaciones de la tabla que se enumeran a continuación:

  • ID, Nombre, Apellido, Correo Electrónico, Contraseña
  • Tipo de usuario: Administrador o Usuario normal

Así que, aquí vamos.

Para incluir en la tabla usuarios, por supuesto, Laravel debería crear la tabla de migración de usuarios predeterminada para usted.

Entonces, para esta demostración, la migración de tu tabla debería verse así:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

Para crear una clase de siembra para nuestra tabla de usuarios.

php artisan make:seeder UserSeeder

Entonces, para crear valores para la sembradora que acabamos de crear, necesitamos usar el paquete Faker predeterminado que viene con cada aplicación Laravel.

Para generar 100 usuarios de una vez, primero hacemos un bucle for y pasamos los datos falsos/pseudo a cada columna de esta manera:

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i  $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

Para inicializar esto en la base de datos, necesitamos ejecutar el siguiente comando:

php artisan db:seed --class=UserSeeder

Esto creará 100 usuarios y los insertará en la base de datos.

Es así de simple.

Ahora pasemos a una solución más avanzada.

Necesitamos crear:

  • Una tabla de departamentos con 10 nuevos departamentos.
  • Crearemos 100 nuevos usuarios.
  • Una tabla de personal que hará referencia a la tabla de usuarios con los mismos detalles y una columna adicional para hacer referencia a la tabla de departamentos, es decir, id_departamento.

Ya sabemos cómo se verá la tabla de usuarios, veamos cómo se verán las tablas de personal y departamento.

Mesa del personal

Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });

Tabla de departamentos:

Schema::create('departments', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

Entonces necesitamos ejecutar la migración para tener estas tablas en nuestra base de datos.

Ahora, para la clase UserSeeder, debemos implementar los puntos indicados anteriormente.

  • Una tabla de departamentos con 10 nuevos departamentos.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

Los dos últimos puntos deberán implementarse juntos

  • Crearemos 100 nuevos usuarios
  • Una tabla de personal que hará referencia a la tabla de usuarios con los mismos detalles y una columna adicional para hacer referencia a la tabla de departamentos, es decir, id_departamento.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}

Explicación:

  • Primero creamos 10 departamentos.

  • Luego configuramos un contador para verificar si se han creado los 10 departamentos.

  • Si la condición del contador es verdadera, creamos 100 usuarios.

  • Para cada uno de estos 100 usuarios, debemos hacer referencia a sus detalles en otra tabla llamada tabla de personal.

  • Cada personal debe pertenecer a un usuario y también debe pertenecer a un departamento, por lo que para hacer esto, necesitamos obtener todos los departamentos que creamos anteriormente e inyectarlos en la columna depart_id al azar.

La implementación completa de UserSeeder

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }

Entonces corre:

php artisan make:seeder --class=UserSeeder

Si tienes preguntas, no dudes en dejarlas. ¡Feliz codificación!

Declaración de liberación Este artículo se reproduce en: https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1 Si hay alguna infracción, comuníquese con Study_golang@163 .com para eliminarlo
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3