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 emup()
.
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 colunaBIGINT
sem sinal, auto-incrementável e chave primária.string($column, $length = 255)
: Cria uma colunaVARCHAR
.integer($column)
: Cria uma colunaINT
.bigInteger($column)
: Cria uma colunaBIGINT
.unsignedInteger($column)
: Cria uma colunaINT
sem sinal.text($column)
: Cria uma colunaTEXT
.boolean($column)
: Cria uma colunaBOOLEAN
.date($column)
: Cria uma colunaDATE
.dateTime($column)
: Cria uma colunaDATETIME
.timestamps()
: Cria as colunascreated_at
eupdated_at
do tipoTIMESTAMP
.softDeletes()
: Adiciona a colunadeleted_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:
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: