Laravel Como adicionar coluna a uma tabela existente

Laravel Como adicionar coluna a uma tabela existente

Problema

Adicionar novas colunas às suas migrações de Laravel é uma coisa comum. Os aplicativos devem ser escaláveis, o que significa que a adição de novos recursos desenvolve mais seu aplicativo.

Muitas vezes, novos desenvolvedores de Laravel precisam executar suas migrações, mas não garantem que as migrações possam reverter e migrar várias vezes sem quebrar nada.

Embora esse não seja o nosso foco, acho importante afirmar que antes de entrarmos em nosso problema.

A seguir, é apresentado um problema comum que os novos desenvolvedores de Laravel tentarão fazer quando quiserem adicionar uma nova coluna a uma tabela existente.

Então, neste momento, eles já fizeram algo como:

função pública up ()

Schema :: Create ('Organizações', função ($ tabela)
$ tabela-> incrementos ('id');
$ tabela-> string ('nome')-> nullable ();
$ tabela-> text ('Sobre')-> Nullable ();
);

Isso criará uma nova tabela para eles. E para limpar isso, você também deve adicionar a função para baixo e simplesmente soltar toda a sua tabela neste caso. A função Down será executada quando você quiser reverter sua migração.

Pulando por tudo isso, o verdadeiro problema aparece quando eles esquecem uma coluna e querem adicionar isso depois para criar um novo arquivo de migração (classe), tente executar algo como:

função pública up ()

Schema :: Create ('Organizações', função ($ tabela)
$ tabela-> Inteiro ('size')-> Nullable ();
);

Eles esperam adicionar um novo tamanho de coluna à tabela existente.

Agora vamos ver o que acontece e como impedir que isso aconteça novamente.

Solução

O principal problema aqui é o que os novos desenvolvedores geralmente tendem a sentir falta de perceber qual é o nome do método estático do esquema . Você só usa Criar quando está criando inicialmente sua tabela. Se você precisar atualizar ainda mais sua mesa a qualquer momento, você deseja usar a tabela.

Portanto, a função real deve ser assim:

função pública up ()

Schema :: Tabela ('Organizações', função ($ tabela)
$ tabela-> Inteiro ('size')-> Nullable ();
);

E a função down seria assim:

função pública para baixo ()

Schema :: Tabela ('Organizações', função ($ tabela)
$ tabela-> dropColumn ('size');
);

Minha sugestão pessoal para você é que, depois de criar seu novo arquivo de migração (alterando), faça o seguinte:

  • Execute a migração
  • Verifique se a coluna é adicionada à tabela
  • Reversão da migração executando o PHP Artisan Migre: Rollback
  • Certifique -se de que nada aconteça
  • Repita as etapas 2 e 3 novamente para garantir que você possa fechar o círculo completo do Migratio
  • n

Outra dica

Isso será útil posteriormente se você quiser automatizar sua implantação e seu script precisa executar uma reversão.

Outra dica que posso dar é planejar onde você deseja colocar sua coluna. Apenas fazendo isso, o Laravel colocará sua nova coluna no final, provavelmente após a coluna Updated_at. (A maioria das tabelas tem isso)

Você deseja usar um método depois, para que seu código final fique assim:

função pública up ()

Schema :: Tabela ('Organizações', função ($ tabela)
$ tabela-> inteiro ('tamanho')-> depois ('nome')-> nullable ();
);

Nesse caso, o Laravel colocará sua nova coluna logo após a coluna do nome, para que pareça agradável e seja organizada muito melhor.