O faker é uma biblioteca que já vem integrada ao Laravel, que serve para gerarmos massas de dados fakes, porém críveis, e com diversas regras. Serve para testar nossos models, layout, carga em banco, e diversos outros fatores.
Caso não utilize o Laravel, você assim mesmo pode usar a biblioteca, apenas siga as intruções no site do repositório.
Caso prefira testar em sua máquina, segue o repositório. Será necessário utilizar o docker para rodar, mas já foi ensinado aqui
Cenário
Imagine a situação, você quer gerar um model sobre ordens de pagamento, e gostaria de testar diversos cenários associados a ela (total de pagamentos por mês,total de credores, total de UF’s que serão necessários enviar pagamento pagar pagar ICMS, etc). Então ao invés de gerarmos esses registros manuais no banco, o que pode levar a vícios na massa de dados, o melhor é criar 1000 registros seguindo um determinado padrão.
Instalando o Laravel
Para esse tutorial, vou considerar que esteja utilizando o repositório no final do artigo, mas caso a instalação do laravel seja tranquila pra você (ela é, acredite), pule as etapas do docker.
git clone https://github.com/samhk222/laravel-faker-tutorial | |
cd laravel-faker-tutorial | |
docker-compose up -d | |
# Instale as dependencias | |
docker exec TUT-7.2.x-webserver composer install | |
# Copie o arquivo .env e altere para acessar seu banco | |
cp public_html/.env.example public_html/.env | |
# Altere os parametros do arquivo .env | |
# DB_CONNECTION=mysql | |
# DB_HOST=TUT-5.6-mysql | |
# DB_PORT=3306 | |
# DB_DATABASE=SERVER | |
# DB_USERNAME=root | |
# DB_PASSWORD=password | |
# Gere a chave | |
docker exec TUT-7.2.x-webserver php artisan key:generate | |
# De as permissoes necessaria nas pastas | |
docker exec TUT-7.2.x-webserver chmod 777 -R storage/ bootstrap/cache |
Acesse, no browser, o endereço http://0.0.0.0:8877 para verificar a instalação
Criando uma migration
Com o laravel rodando, vá até o console e digite
php artisan make:model OrdemDePagamento -a # O parâmetro <strong>-a</strong> cria o Model, Factory, a migration e o Controller automaticamente # Repare que não estamos criando dentro do docker, isso é para evitar uns erros chatos de permissão, # porque ele criaria os arquivos como root dentro do container, e precisariamos digitar nossa senha de root # quando estivessemos editando os arquivos de fora do container.
O primeiro arquivo que editaremos, é o arquivo de migration, alternado o método UP para ficar conforme abaixo:
public function up() { Schema::create('ordem_de_pagamentos', function (Blueprint $table) { $table->increments('id'); $table->string('nome'); $table->string('CPF', 14); $table->string('CNPJ', 14); $table->string('telefone', 15); $table->string('endereco'); $table->string('cidade'); $table->string('UF',2); $table->decimal('valor',9,2); $table->timestamp('created_at')->useCurrent(); $table->timestamp('updated_at')->useCurrent(); }); }
Fique a vontade para criar campos extras.
Em sequência vamos rodar essa migration. Lembre-se, se você trabalha em equipe, não deixe de usar migrations para manter a estrutura do seu banco de dados igual entre a equipe. Isso evita 70% dos erros em produção.
╭─samhk222@obra /var/www/html/laravel-faker-tutorial/public_html ‹master*› ╰─$ docker exec TUT-7.2.x-webserver php artisan migrate Migration table created successfully. Migrating: 2014_10_12_000000_create_users_table Migrated: 2014_10_12_000000_create_users_table Migrating: 2014_10_12_100000_create_password_resets_table Migrated: 2014_10_12_100000_create_password_resets_table Migrating: 2018_12_28_135707_create_ordem_de_pagamentos_table Migrated: 2018_12_28_135707_create_ordem_de_pagamentos_table
Crie o seeder.
╭─samhk222@obra /var/www/html/laravel-faker-tutorial/public_html ‹master*› ╰─$ docker exec TUT-7.2.x-webserver php artisan make:seeder OrdemDePagamentoSeeder Seeder created successfully.
Edite ele, alterando o método run, para os seguintes dados
public function run() { $faker = \Faker\Factory::create('pt_BR'); for ($i=0; $i<50; $i++) { DB::table('ordem_de_pagamentos')->insert([ 'nome' => $faker->name, 'CPF' => $faker->cpf, 'CNPJ' => $faker->cnpj(false), 'telefone' => sprintf('(0%s) %s', $faker->areaCode, $faker->landline), 'endereco' => $faker->address, 'cidade' => $faker->city, 'UF' => $faker->stateAbbr, 'valor' => $faker->randomFloat(2, 12, 150000), ]); } }
Falta uma última alteração, que é no controle dos seeders. Precisamos habilitar que ele execute nossa classe. No arquivo database/seeds/DatabaseSeeder.php altere o método run, e inclua a classe
public function run() { $this->call(OrdemDePagamentoSeeder::class); }
Pronto, agora basta rodar o seed para cadastramos os dados no banco
╭─samhk222@obra /var/www/html/laravel-faker-tutorial/public_html ‹master*› ╰─$ docker exec TUT-7.2.x-webserver php artisan db:seed Seeding: OrdemDePagamentoSeeder Database seeding completed successfully.
Dessa forma, estaremos criando 50 registros aleatórios, com os dados gerados pela classe Faker, e localizados para pt-BR. Existe uma infinidade de valores que podem ser utilizados como Formatadores, inclusive alguns disponíveis para pt-BR. Veja todos eles no site do repositório. Uma dica, pesquise por pt_BR para ver os modificadores especiais, como por exempo CNPJ ou CPF.