Migrations e Seeds no Laravel 5 Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 2 anos, 5 meses, 1 semana, 5 dias atrás.

Uma das primeiras coisa que faço quando começo a trabalhar em um novo projeto é modelar o banco de dados (acho que todo mundo, né) e de alguma forma passar a responsabilidade de criar e manter todas as tabelas ao PHP, para facilitar o deploy e eu não ter que ficar indo até o banco de dados toda hora (produtividade). E isso tem nome, chama migrations.

Criando tabelas com Migration

O Laravel 5 já vem com duas tabelas prontas para serem criadas, a de armazenamento de usuários e a de reset de senhas, os arquivos referentes a cada uma fica dentro de /database/migrations. Para criar as tabelas basta abrir o diretório raiz do projeto no terminal e rodar o comando a seguir:

php artisan migrate

Claro, você já tem que ter o acesso ao banco de dados configurado.

Gostou deste artigo?

Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!

Até então sem muitas novidades, mas como criar uma nova tabela? Simples, primeiro precisamos criar um novo arquivo de migration, vamos criar uma tabela para páginas, vou chamar de pages.

php artisan make:migration create_pages_table

O createpagestable foi o nome que eu dei ao arquivo, você pode dar o nome que quiser, mas recomendo que se organize utilizando nomes que reflitam o que o arquivo faz. Ele deve estar junto com os que já existiam (users e password_reset).

Dentro do arquivo você já tem dois métodos, um chamado up() e outro chamado down(), o primeiro executa alterações, o segundo desfaz, veja como é simples:

  • up() - cria a tabela
  • down() - remove a tabela

Se o comando up() criar um campo, o down() remove o campo, é simples.

Se você olhar o arquivo que cria a tabela users vai matar de primeira como deve fazer com a pages, mas vou ajudar. Vamos imaginar que nossa tabela tenha os campos id, title, body, url, active, updateat e createdat e cada um deles deverá:

  • id - integer, auto-increment
  • title - text, 100 caracteres - único
  • body - long text
  • url - text, 100 caracteres - único
  • active - boolean, 1 caracter
  • update_at - Datetime
  • created_at - Datetime

Vamos ver como isso ficaria no arquivo migration:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreatePagesTable extends Migration {

    /**
     * Rorda o migrations.
     *
     * @return void
     */
    public function up()
    {
    /**
     * Aqui é onde estou criando minha tabela
     */
            Schema::create('pages', function(Blueprint $table)
            {
                    $table->increments('id');
                    $table->string('title', 100)->unique();
                    $table->longText('body');
                    $table->string('url', 100)->unique();
                    $table->boolean('active');
                    $table->timestamps();
            });
    }

    /**
     * Desfaz o migrations.
     *
     * @return void
     */
    public function down()
    {
            Schema::drop('pages');
    }

}

Na hora de criar os tipos de campos eu usei alguns métodos específicos, para ver a lista completa da uma olhada aqui.

Foi fácil né, rode o artisan migration novamente pra ver sua nova tabela no banco de dados.

Inserindo (semeando) dados iniciais

E que tal se inserirmos uma página inicial e um usuário no nosso projeto, assim quando formos instalar o projeto bastará rodar uma linha de comando e pronto.

Vá até o arquivo em database/seeds/DatabaseSeeder.php e adicione estas classes no fim do arquivo.

class UserTableSeeder extends Seeder {

    public function run()
    {
        DB::table('users')->delete();

        User::create([
            'name'=>'Erik Figueiredo',
            'email'=>'erik.figueiredo@gmail.com',
            'password'=>bcrypt('123456'),
        ]);
    }

}

class PagesTableSeeder extends Seeder {

    public function run()
    {
        DB::table('pages')->delete();

        Page::create([
            'title'=>'Página inicial',
            'body'=>'Criado com Laravel',
            'slug'=>'home',
            'active'=>1,
        ]);
    }

}

E dentro do método run() da classe DatabaseSeeder:

$this->call('UserTableSeeder');
$this->call('PagesTableSeeder');

Precisa explicar? Ta bom, explico, eu inseri duas classes, cada uma responsável por inserir um registro em uma tabela, o DatabaseSeeder::run() carrega e executa ambas as classes.

O comando DB::table('pages')->delete(); remove todos os dados da tabela (note que também tem o comando em users, claro, com a tabela users informada), na sequência temos o Page::create() que recebe um array com os dados a registrar no banco.

Para efetivar o registro basta rodar o comando:

php artisan db:seed

Verifique no banco de dados se deu tudo certo.

Conclusão

É uma excelente prática criar migrations e seeds para seu projeto, é um passo importante para facilitar a manutenção e o deploy da sua aplicação, por falar em deploy, em breve sai um artigo sobre isso aqui e juro dar uma atenção especial para o Laravel.


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!