Ao criar um aplicativo, seja ele pequeno, médio ou grande. Ter dados de teste para brincar em um aplicativo é inevitável e importante.
Então, vamos começar do simples ao avançado com dois cenários diferentes.
eu. Todos os aplicativos ou a maioria dos aplicativos devem ter usuários. Às vezes, queremos classificar/marcar usuários como Admin ou Usuários regulares. Então, vamos gerar um semeador simples com 100 usuários com as especificações da tabela abaixo listadas:
Aqui vamos nos.
Para propagar a tabela users, é claro, você teria a tabela de migração de usuários padrão criada para você pelo Laravel.
Então, para fins desta demonstração, a migração da sua tabela deve ficar assim:
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 criar uma classe semeadora para nossa tabela de usuários.
php artisan make:seeder UserSeeder
Portanto, para criar valores para o semeador que acabamos de criar, precisamos usar o pacote Faker padrão que vem com cada aplicação Laravel.
Para gerar 100 usuários de uma vez, primeiro fazemos um loop for e passamos os dados falsos/pseudo para cada coluna assim:
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 propagar isso no banco de dados, precisamos executar o comando abaixo:
php artisan db:seed --class=UserSeeder
Isso criará 100 usuários e os inserirá no banco de dados.
É simples assim.
Agora, para uma solução mais avançada.
Precisamos criar:
Já sabemos como será a tabela de usuários, vamos ver como serão as tabelas de funcionários e departamentos.
Tabela de funcionários
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(); });
Tabela de departamentos:
Schema::create('departments', function (Blueprint $table) { $table->id(); $table->string('name'); $table->timestamps(); });
Portanto, precisamos executar a migração para ter essas tabelas em nosso banco de dados.
Agora, para a classe UserSeeder, devemos implementar os marcadores declarados anteriormente.
$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 ; }
Os dois últimos pontos precisarão ser implementados juntos
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 ]); } }
Explicação:
Criamos 10 departamentos primeiro.
Em seguida montamos um contador para verificar se todos os 10 departamentos foram criados.
Se a contra-condição for verdadeira, criamos 100 usuários.
Para cada um desses 100 usuários, precisamos referenciar seus detalhes em outra tabela chamada tabela de equipes.
Cada staff deve pertencer a um usuário e também deve pertencer a um departamento, então para fazer isso, precisamos pegar todos os departamentos que criamos anteriormente e injetá-los na coluna Department_id aleatoriamente.
A implementação completa do 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 ]); } }
Então corra:
php artisan make:seeder --class=UserSeeder
Se você tiver dúvidas, não hesite em abandoná-las. Boa codificação!
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3