Docker,  Laravel,  PHP,  Tutoriais

Utilizando o faker para gerar massa de dados em português no laravel

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.


Notice: ob_end_flush(): failed to send buffer of zlib output compression (0) in /home/samu/public_html/blog/wp-includes/functions.php on line 5277