Tutorial20 Mar 20267 min de leitura

Como Gerar Laravel Migrations a partir do seu Diagrama ER

Projete seu schema visualmente no ER Flow e gere Laravel migrations prontas para produção com métodos up() e down() automaticamente. Um guia passo a passo do design à migration.

O sistema de migrations do Laravel é um dos melhores recursos do framework — mudanças de banco de dados controladas por versionamento que toda a sua equipe pode executar com um único comando php artisan migrate. Mas escrever migrations manualmente é tedioso, especialmente no início de um projeto quando você está criando dezenas de tabelas. E se você pudesse design seu banco de dados visualmente e gerar todos os arquivos de migration automaticamente?

É exatamente isso que ER Flow faz. Projete seu schema em um canvas visual, clique para gerar e obtenha Laravel migrations prontas para produção com métodos up() e down() apropriados. Aqui está como configurar este workflow do zero.

Por que Design Visual + Migrations Geradas?

Antes de mergulhar, vamos abordar por que você gostaria deste workflow em vez de apenas escrever migrations diretamente.

Quando você escreve migrations manualmente, está pensando na estrutura do banco de dados de forma linear, arquivo por arquivo. Você cria a migration de usuários, depois a migration de posts, e aí percebe que esqueceu a constraint de foreign key e cria outra migration para adicioná-la. Ao fim de um projeto, você tem 30+ arquivos de migration que são difíceis de entender como um todo.

O design visual permite que você veja seu schema completo de uma vez. Relacionamentos são vistos como linhas entre tabelas. Foreign keys faltantes ficam óbvias. Dependências circulares se destacam. E quando você gera migrations a partir dessa imagem completa, o resultado é limpo e correto desde o início.

A outra vantagem é comunicação. Mostrar a um desenvolvedor Laravel um diagrama visual de 25 tabelas com relacionamentos é instantaneamente compreensível. Mostrá-lo 25 arquivos de migration requer que ele reconstrua mentalmente a mesma imagem.

Configurando seu Projeto no ER Flow

Comece criando uma conta gratuita em erflow.io e criando um novo workspace. Quando solicitado a escolher um tipo de banco de dados, selecione MySQL ou PostgreSQL — aquele que seu projeto Laravel usa. Isso garante que os tipos de coluna no seu diagrama correspondam ao que Laravel espera.

Criando sua primeira tabela

Vamos construir um schema de aplicação de blog simples. Clique para criar uma nova tabela e nomeie-a users. Adicione as colunas que a migration padrão de usuários do Laravel inclui: id (bigInteger, auto-increment, chave primária), name (string), email (string, unique), email_verified_at (timestamp, nullable), password (string), remember_token (string, nullable) e os timestamps padrão created_at e updated_at.

Agora crie uma tabela posts: id, user_id (bigInteger, foreign key para users), title (string), slug (string, unique), body (text), excerpt (text, nullable), featured_image (string, nullable), status (enum: draft, published, archived), published_at (timestamp, nullable) e timestamps.

Desenhe uma linha de relacionamento de posts.user_id para users.id — isso estabelece o relacionamento um-para-muitos.

Construindo o schema

Continue adicionando tabelas para um blog completo: categories (com parent_id para categorias aninhadas), post_categories (junction table para o relacionamento muitos-para-muitos), tags, post_tags (outra junction table), comments (com foreign keys user_id e post_id, mais um parent_id para comentários encadeados) e media (para uploads de imagem/arquivo associados a posts).

Conforme você adiciona cada tabela e desenha relacionamentos, seu diagrama visual cresce para uma imagem completa do modelo de dados do blog. Você pode ver em um relance que posts se conectam a usuários, categorias, tags e comentários — e que comentários podem ser aninhados via auto-referência.

Gerando Laravel Migrations

Uma vez que seu schema está completo, é hora de gerar os arquivos de migration.

Criando um checkpoint

Primeiro, crie um checkpoint do seu schema atual. Isso serve como a "baseline" para geração de migration. Pense nele como um commit do Git — ele captura o estado do seu schema neste momento.

Gerando os arquivos

Clique no botão de geração de migration e selecione Laravel como formato de saída. ER Flow gera arquivos de migration individuais para cada tabela, devidamente ordenados para respeitar dependências de foreign key. A migration de tabela users é gerada antes de posts (porque posts referencia users), e junction tables vêm depois de ambas as tabelas pai.

Cada migration inclui um método up() completo com Schema::create(), todas as definições de coluna com tipos de coluna Laravel apropriados, definições de índices e constraints de foreign key. O método down() inclui Schema::dropIfExists() com foreign keys removidas na ordem correta.

Como é a saída

Para a tabela posts, você obteria algo assim: uma classe de migration com Schema::create('posts', ...) no método up(), definindo $table->id(), $table->foreignId('user_id')->constrained()->cascadeOnDelete(), $table->string('title'), $table->string('slug')->unique(), $table->text('body') e assim por diante. O método down() remove a tabela de forma limpa.

O mapeamento de tipos de coluna é consciente do banco de dados — se seu workspace está configurado para PostgreSQL, colunas text usam o tipo TEXT do PostgreSQL; colunas enum são mapeadas corretamente; e colunas JSON usam o tipo jsonb apropriado.

Migrations Incrementais

O verdadeiro poder vem quando seu schema evolui. Digamos que você precise adicionar uma coluna views_count aos posts e criar uma nova tabela newsletters.

Faça essas mudanças no seu diagrama ER Flow, depois crie um novo checkpoint. Agora, quando você gera migrations, ER Flow compara os dois checkpoints e gera apenas as mudanças incrementais. Você obtém uma migration add_views_count_to_posts com $table->integer('views_count')->default(0) no método up() e $table->dropColumn('views_count') em down(), mais uma migration completa create_newsletters_table para a nova tabela.

Isso é muito melhor do que tentar se lembrar do que mudou e escrever a migration manualmente. O diff é automático, completo e inclui ambos os métodos up() e down().

Usando com IA (MCP Server + Cursor)

Para desenvolvedores Laravel usando Cursor, você pode combinar design visual com assistência de IA. Conecte Cursor ao MCP Server do ER Flow, depois use prompts como:

"Preciso adicionar um sistema de subscription ao meu app SaaS. Usuários devem ter planos com billing mensal/anual, e preciso rastrear histórico de pagamentos."

Cursor lê seu schema existente através do MCP, cria as novas tabelas (plans, subscriptions, payments) com proper foreign keys para sua tabela users existente, e as mudanças aparecem no seu canvas ER Flow. Depois gere as Laravel migrations apenas para essas novas tabelas.

Este workflow de três caminhos — design visual + assistência de IA + geração de migration — é a forma mais rápida de ir de ideia para código de banco de dados Laravel pronto para produção.

Melhores Práticas

Nomeie tabelas em plural, snake_caseusers, blog_posts, order_items. Isso corresponde às convenções do Laravel e garante que as migrations geradas sigam as expectativas do framework.

Sempre use `foreignId()` com `constrained()` — ER Flow gera esses automaticamente quando você desenha linhas de relacionamento, garantindo integridade referencial.

Configure regras de cascade intencionalmente — decida se deletar um usuário deve cascade-delete seus posts (cascadeOnDelete()) ou definir a foreign key como null (nullOnDelete()). ER Flow permite que você configure isso por relacionamento.

Crie checkpoints antes de mudanças maiores — isso oferece diffs limpos e a capacidade de fazer rollback se uma direção de design não funcionar.

Revise as migrations geradas antes de executar — enquanto ER Flow gera código correto, sempre revise a saída. Você pode querer adicionar lógica customizada, dados seed ou ajustar a ordem de migration.

Do Diagrama para o Banco de Dados em Minutos

O workflow tradicional do Laravel é: pense sobre schema → escreva migrations → execute-as → perceba que esqueceu algo → escreva outra migration → repita. O workflow ER Flow é: projete visualmente → veja a imagem completa → gere todas as migrations de uma vez → execute-as → itere visualmente quando mudanças são necessárias.

Para projetos novos, isso pode economizar horas de tempo de setup inicial. Para projetos existentes, a geração de migration incremental significa que você pode adotar ER Flow em qualquer ponto — importe seu schema existente e comece a gerar migrations para mudanças futuras.