"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como gerar dados facilmente com Database Seeders no Laravel

Como gerar dados facilmente com Database Seeders no Laravel

Publicado em 31/07/2024
Navegar:290

How to easily generate data with Database Seeders in Laravel

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:

  • ID, Nome, Sobrenome, E-mail, Senha
  • Tipo de usuário: um Administrador ou um Usuário normal

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:

  • Uma tabela de departamentos com 10 novos departamentos.
  • Criaremos novos 100 usuários.
  • Uma tabela de funcionários que fará referência à tabela de usuários com os mesmos detalhes e uma coluna extra para fazer referência à tabela de departamentos, ou seja, departamental_id.

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.

  • Uma tabela de departamentos com 10 novos 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  ;
        }

Os dois últimos pontos precisarão ser implementados juntos

  • Criaremos novos 100 usuários
  • Uma tabela de funcionários que fará referência à tabela de usuários com os mesmos detalhes e uma coluna extra para fazer referência à tabela de departamentos, ou seja, Department_id.
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!

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1 Se houver alguma infração, entre em contato com study_golang@163 .com para excluí-lo
Tutorial mais recente Mais>

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