Inserindo registros com Seeds no Laravel

Utilize esse recurso para inserir dados automaticamnte toda vez em que for criar seu Banco de Dados.

Gabriel Albuquerque (Albuca)
5 min readAug 3, 2020
Imagem de fundo por Akil Mazumder: https://www.pexels.com/@akil-mazumder-334946

Seeds?

Seeds (ou Seeders) são recursos que permitem que o desenvolvedor configure/especifique um registro e ao rodar um comando, o registro seja inserido no banco de dados.

As seeds levam esse nome, pois o processo se assemelha muito com a plantação de uma semente (seed), que no momento certo, se torna uma árvore (registro).

Mas pra quê criar seeds sendo os dados da aplicação são dinâmicos?

Realmente, quando se tem um cadastro de usuários, é o usuário que deve decidir se o email dele será hotmail ou outlook, se sua senha será ‘Sup3r@s3cr3t4#123’ ou então será ‘velozesefuriosos’, ou seja, esses dados são dinâmicos, e não é possível colocar informações dinâmicas em um arquivo fixo. Então, qual a utilidade das seeds?

Existem inúmeras! Primeiro, e se esse sistema de cadastro tiver um usuário administrador, o qual, terá o ID 1, nome admin, poderá suspender usuários, e seu e-mail e sua senha, será de acordo com o que o dono do projeto quer? Isso é um dado fixo, você pode conversar com o owner do projeto e salvar essas informações de maneira segura em uma seed, e quando a aplicação sair do ambiente de desenvolvimento para o de produção, ao rodar um comando, o registro de admin será criado, sem a necessidade do administrador ir lá e criar uma conta, ele acessará a aplicação e só logará.

E se caso você tenha registros específicos os quais você queira fazer testes, mas outro desenvolvedor está encarregado por fazer os mesmos, você não precisará exportar um arquivo .sql para ele executar na máquina dele e criar tudo. Basta enviar o projeto junto com as seeds e quando ele iniciar o projeto já terá os registros prontos para testes.

Laravel

E onde o Laravel se encaixa nisso? O Laravel, por padrão oferece o suporte para o uso de Seeds, ou seja, você não precisará instalar componentes externos (além dos que vêm por padrão no framework) para trabalhar com esse recurso interessantísimo.

Hands On

Criando uma Seed

Vamos simular a criação de uma seed para um usuário administrador, ele terá os campos ‘id’, ‘name’, ‘email’, ‘password’. As seeds trabalham em conjunto com o banco de dados, por conta disso é preciso que você já tenha criado seu Schema, seu projeto, também é preciso que seu ‘.env’ (Laravel) esteja configurado, o meu está assim:

DB_DATABASE=seeds # Nome do Schema criado
DB_USERNAME=root # Padrão MySQL/MariaDB
DB_PASSWORD= # Padrão (se não der certo tente 'root')

Mas ainda falta a tabela, o Laravel trabalha com Migrations, e por padrão, já tem uma migration que fará a criação da nossa tabela de usuários com os campos necessários, basta digitar na raíz do projeto, em um console:

php artisan migrate

Se você tem dúvidas ou não conhece as Migrations, no meu artigo anterior eu dei uma breve introdução e mostrei o funcionamento delas na prática.

Com tudo parametrizado, vamos criar a seed. No console digite:

php artisan make:seeder UsersTableSeeder# php artisan: Execução do helper artisan com o PHP
# make:seeder: Use o artisan para criar uma seeder
# usersTableSeeder: Nome da seeder (<tabela>TableSeeder)

A seeds criadas vão para o diretório database/seeds/

Configurando a Seed

A estrutura de uma seed/seeder

Dentro do arquivo, você encontrará uma classe com o nome da seeder criada, essa classe extende a classe Seeder, dentro da classe criada terá um método chamado run, esse é o método que será executado quando rodarmos a seed. O objetivo dele nesse momento, é inserir dentro da tabela ‘users’ o nome ‘admin’, o e-mail ‘admin@sys.com’ e a senha ‘senha123’.

Então vamos lá. Para inserir os dados na tabela, nós usaremos uma Facade, Facades são recursos que o Laravel fornece e que nos ajudam a ganhar tempo quando queremos realizar alguma operação na aplicação, nesse caso usaremos uma facade que nos permita inserir registros no Banco de Dados, o nome da facade é DB, então vamos dar um ‘use’ nela:

<?phpuse Illuminate\Support\Facades\DB;

Agora vamos usar a classe DB (que acabamos de requirir) dentro do método run, a classe db tem um método estático chamado ‘table’, e ele recebe como parâmetro o nome de uma tabela, vamos usar ele:

public function run()
{
DB::table('users')

Agora que acessamos a tabela ‘users’ podemos encadear o método ‘insert’ que receberá um array associativo com os campos e os valores a serem inseridos dentro da tabella em questão:

public function run()
{
DB::table('users')->insert([
// Nome será 'admin'
'name' => 'admin',
// ==
'email' => 'admin@sys.com',

// senha123 encriptada
'password' => bcrypt('senha123')
]);
}

Pronto, a seed está pronta, mas basta torná-la visível. Quando rodamos o comando seed, ele irá executar o método run do arquivo DatabaseSeeder, se nós não especificarmos nossa seed dentro desse outro arquivo, nossa seed não será executada. Então, dentro de DatabaseSeeder, vamos especificar a classe da nossa seed:

public function run()
{
// Chamando o método call, e especificando a classe
$this->call(UsersTableSeeder::class)
}

Ótimo, com nosso banco de dados criado, .env configurado, tabela criada e seed pronta, é só rodar o seguinte comando para que o usuário administrador seja criado:

php artisan db:seed
Retorno do seed

Alternativas

Agora, caso não tivéssemos configurado o DatabaseSeeder para rodar nossa seed, ou então, quiséssemos rodar uma seed específica, poderíamos especificar ela com a flag ‘— class’:

php artisan db:seed --class=UsersTableSeeder

Podemos também, quando formos criar a base de dados, ao rodar uma migration podemos também executar uma seed para a tabela criada:

# Rodar migrations e inserir dados
php artisan migrate --seed
# Dar um refresh no DB e inserir os dados
php artisan migrate:refresh --seed
# Dropar todas as tabelas e criar novamente com os registros
php artisan migrate:fresh --seed

Conclusão

E aí, conseguiu aprender como usar as Seeds para inserir seus registros fixos no Banco de Dados?

Nunca deixe de ler a Documentação Oficial de terminado framework ou recurso, o que eu escrevo aqui é só o que aprendi e decidi entregar de forma ‘mastigada’ e consequentemente, acabo deixando algumas coisas de fora. Enfim, leia a Documentação do Laravel 7 e também leia a parte que aborda o uso das Seeds no Framework. Bons estudos dev!

--

--

No responses yet