Laravel Migrations

Laravel
Tempo de leitura: 4 minutos

Laravel Migrations: Gerenciar o esquema do banco de dados ao longo do ciclo de vida de uma aplicação pode ser um desafio. O Laravel oferece uma solução elegante e poderosa para esse problema: as laravel migrations. As migrations são como controle de versão para o seu banco de dados, permitindo que você crie, modifique e reverta as tabelas do seu banco de dados de forma organizada e consistente.

Este artigo explora em detalhes o sistema de migrations do Laravel, desde a geração até a aplicação e reversão de alterações.

Gerando as Migrations

Para criar uma nova migration, utilize o comando Artisan make:migration:

Bash

php artisan make:migration create_users_table

Este comando criará um novo arquivo de migration no diretório database/migrations. O nome do arquivo seguirá o padrão YYYY_MM_DD_HHMMSS_nome_da_migracao.php.

Você pode gerar migrations com ações específicas, como criar uma nova tabela, usando as opções --create ou --table:

Bash

php artisan make:migration create_posts_table --create=posts
php artisan make:migration add_user_id_to_posts_table --table=posts

O primeiro comando cria uma migration para criar a tabela posts, enquanto o segundo cria uma migration para adicionar uma coluna à tabela posts.

Estrutura das Migrations

Um arquivo de migration contém duas funções principais: up() e down().

  • up(): Define as alterações que serão aplicadas ao banco de dados.
  • down(): Define as ações para reverter as alterações feitas em up().

Exemplo de estrutura de uma migration:

PHP

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

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->string('email')->unique();
            $table->timestamp('email_verified_at')->nullable();
            $table->string('password');
            $table->rememberToken();
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('users');
    }
};

Executando as Migrations

Para executar as migrations pendentes, utilize o comando migrate:

Bash

php artisan migrate

Para reverter a última migration executada, utilize migrate:rollback:

Bash

php artisan migrate:rollback

Para reverter todas as migrations e executá-las novamente, use migrate:refresh:

Bash

php artisan migrate:refresh

Para executar um conjunto específico de migrations, você pode usar a opção --path:

Bash

php artisan migrate --path=/database/migrations/path/to/migrations

Para forçar a execução de migrations em produção (sem prompt de confirmação), use a opção --force:

Bash

php artisan migrate --force

Tabelas

Dentro da função up(), você interage com o esquema do banco de dados usando a fachada Schema. O método create() cria uma nova tabela:

PHP

Schema::create('users', function (Blueprint $table) {
    // Definição das colunas
});

O método dropIfExists() exclui uma tabela caso ela exista, evitando erros:

PHP

Schema::dropIfExists('users');

O método table() permite modificar uma tabela existente:

PHP

Schema::table('users', function (Blueprint $table) {
    // Modificações na tabela users
});

Colunas

Dentro do bloco de definição da tabela, você define as colunas usando os métodos do objeto Blueprint. Alguns exemplos:

  • id(): Cria uma coluna BIGINT sem sinal, auto-incrementável e chave primária.
  • string($column, $length = 255): Cria uma coluna VARCHAR.
  • integer($column): Cria uma coluna INT.
  • bigInteger($column): Cria uma coluna BIGINT.
  • unsignedInteger($column): Cria uma coluna INT sem sinal.
  • text($column): Cria uma coluna TEXT.
  • boolean($column): Cria uma coluna BOOLEAN.
  • date($column): Cria uma coluna DATE.
  • dateTime($column): Cria uma coluna DATETIME.
  • timestamps(): Cria as colunas created_at e updated_at do tipo TIMESTAMP.
  • softDeletes(): Adiciona a coluna deleted_at para soft deletes.

Exemplo de definição de colunas:

PHP

$table->id();
$table->string('name', 100);
$table->string('email')->unique();
$table->integer('votes')->default(0);
$table->boolean('active')->default(true);
$table->timestamps();
$table->softDeletes();

Índices

Índices melhoram o desempenho das consultas. Você pode definir índices usando os seguintes métodos:

  • primary($columns): Define uma chave primária.
  • unique($columns): Define um índice único.
  • index($columns): Define um índice comum.
  • fulltext($columns): Define um índice fulltext (para buscas em texto).

Exemplo de definição de índices:

PHP

$table->primary('id');
$table->unique('email');
$table->index('name');
$table->fulltext('description');

Exemplo: Criando uma tabela de produtos com relacionamentos

PHP

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

return new class extends Migration
{
    public function up(): void
    {
        Schema::create('categories', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

        Schema::create('products', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->text('description')->nullable();
            $table->decimal('price', 8, 2);
            $table->unsignedBigInteger('category_id');
            $table->foreign('category_id')->references('id')->on('categories');
            $table->timestamps();
        });
    }

    public function down(): void
    {
        Schema::dropIfExists('products');
        Schema::dropIfExists('categories');
    }
};

Este exemplo cria duas tabelas, categories e products, com um relacionamento de chave estrangeira entre elas.

Conclusão

Laravel Migrations: As laravel migrations são uma ferramenta essencial para o desenvolvimento de aplicações Laravel. Elas permitem versionar o esquema do banco de dados, facilitando o trabalho em equipe, a implantação em diferentes ambientes e a manutenção da aplicação a longo prazo.

Dominar as migrations é fundamental para qualquer desenvolvedor Laravel que busca construir aplicações robustas e escaláveis. Com os exemplos e explicações apresentados neste artigo, você está pronto para começar a usar migrations em seus projetos e gerenciar seu banco de dados de forma eficiente.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi