O Laravel por padrão inclui um método simples para criarmos e executarmos seeders para popular rapidamente nosso banco de desenvolvimento através de classes que chamamos de seeders. Um seeder contém um array de dados que serão inseridos no banco de dados quando chamados.
Um exemplo de seeder de cidades
O uso de seeders é muito comum, especialmente em ambientes de testes e homologação, para que você possa ter dados no banco para começar a trabalhar.
Mas, o que é o Inverse-Seeder?
O inverse seeder, faz o inverso (surpresa!). Ele gera uma classe seeder baseado nos dados que você têm atualmente no banco de dados. É quase um dump do banco de dados, mas ao invés de gerarmos um arquivo sql para isso, fazemos tudo por dentro do Laravel.
Atualmente, utilizo o iseed, package disponibilizado pelo usuário orangehill, no github.
Como utilizar o iseed?
A instalação e utilização do iseed é muito simples e pode ser feita diretamente pelo composer.
Para instalar esta dependência, adicione o seguinte ao seu composer.json:
Após isso, atualize suas dependências com o composer:
E adicione o service provider ao seu config/app.php
Pronto! O iseed já está pronto para ser utilizado.
Você pode gerar seeds de uma ou mais tabelas com o comando iseed, é só passar as tabelas separadas por vírgula.
Por que utilizar um Inverse-Seeder?
Podemos utilizar inverse-seeders por muitos motivos. Na minha opinião, os principais são:
- Fazer um backup dos dados quando preciso refazer o banco de testes.
- Replicar alguns dados base, para a utilização do projeto local por outros devs.
- Utilizá-lo para migrar tipo de dados.
Ex.: No meu caso, utilizei o Inverse-Seeder para solucionar um problema que costuma ser muito chato: alterar o tipo de dado de uma tabela no banco que já está populada.
Neste caso, um campo que aceitava apenas inteiros, passou a poder receber caracteres. O banco não vai aceitar essa mudança quando já temos registros na tabela, e eu não queria remover todos os dados do ambiente de testes e recriá-los. A solução foi gerar uma classe seed da tabela e tratar a conversão de dados dentro da própria classe. Desta maneira pude dropar, modificar e repopular a tabela em pouco minutos.
Apesar de ser uma tecnologia muito útil, não podemos forçar as limitações dos seeders. Eles não substituem um backup, e devem ser utilizados com muita cautela em um ambiente de produção. Seeders e Inverse-seeders são ferramentas para facilitar o desenvolvimento e testes de uma aplicação, nunca devem substituir as boas práticas de manutenção de um banco de dados.