Remover a migração com segurança No Laravel


206

No Laravel, parece haver um comando para criar uma migração, mas não a remoção.

Comando Criar migração:

php artisan migrate:make create_users_table

Se eu quiser excluir a migração, posso excluir com segurança o arquivo de migrações correspondente na pasta banco de dados / migrações?

Arquivo de migrações:

2013_05_31_220658_create_users_table

Respostas:


375

Criei acidentalmente uma migração com um nome incorreto (comando php artisan migrate:make:). Como não executei ( php artisan migrate) a migração, resolvi removê-la. Meus passos:

  1. Exclua manualmente o arquivo de migração em app/database/migrations/my_migration_file_name.php
  2. Redefina os arquivos de carregamento automático do compositor: composer dump-autoload
  3. Relaxar

Se você executou a migração ( php artisan migrate), pode fazer o seguinte:

a) Executar migrate:rollback- é o caminho certo para desfazer a última migração (Thnx @Jakobud)

b) Se migrate:rollbacknão funcionar, faça-o manualmente (lembro-me de bugs com migrate: rollback em versões anteriores):

  1. Exclua manualmente o arquivo de migração em app/database/migrations/my_migration_file_name.php
  2. Redefina os arquivos de carregamento automático do compositor: composer dump-autoload
  3. Modifique seu banco de dados: remova a última entrada da tabela de migrações

2
Obrigado. O gottcha para mim após a exclusão de uma migração foi esquecendo de corrida compositor despejo-autoload
Theo Kouzelis

7
Se você executou a migração, a maneira "adequada" é executar migrate:rollbacka reversão da migração, exclua o arquivo de migração e descarregue o carregamento automático. Não há necessidade de hackear o banco de dados ou a tabela de migrações.
Jake Wilson

grande resposta para passos depois (migre php artesão) (Y)
Imran Khan

Meu Deus e eu me atormentamos quando eu estava errado. Obrigado.
Pablo Contreras

4. Exclua a tabela real do banco de dados
Jin

64

Se a migração foi executada (leia-se: migrado), você deve reverter sua migração para limpar o histórico da tabela do banco de dados. Depois da reversão, você poderá excluir com segurança seu arquivo de migração e prosseguir com a migração novamente.


Ele não executou a migração, no entanto. Você não pode reverter o que realmente não fez, pode?
precisa

9
Não, você não pode, mas se for esse o caso, não deve haver histórico armazenado no banco de dados de migrações, o que significa que você pode excluir o arquivo com segurança.
Jason Lewis

14
 php artisan migrate:fresh

Deve fazer o trabalho, se você estiver em desenvolvimento e o resultado desejado é começar tudo de novo.

Na produção, talvez essa não seja a coisa desejada, então você deve ser advertido. (O comando migrate: fresh remove todas as tabelas do banco de dados e executa o comando migrate).


5
3 votos positivos? o OP pediu uma maneira de excluir uma migração, não destruir e atualizar o banco de dados inteiro. Este é um péssimo conselho, não faça isso a menos que saiba o que está fazendo.
Goodbytes 5/11

por favor, leia sobre a diferença entre migrate: refresh e migrate: fresh que você descreveu o primeiro; o segundo, em parte, redefine parcialmente, evitando o trabalho manual!
9788 johson

1
migrate: fresh remove imediatamente TODAS as tabelas e executa novamente as migrações como se estivesse executando pela primeira vez. Não há nada parcial nisso .. quaisquer dados desaparecerão. Isso resolverá o problema, mas não é uma resposta válida para a pergunta.
Goodbytes

12

Você provavelmente também precisará excluir a entrada da tabela de migrações.


7

Eu acidentalmente criei duas vezes create_users_table. Ele substituiu algumas classes e transformou a reversão em ErrorException.

O que você precisa fazer é encontrar o arquivo autoload_classmap.php na pasta vendor / compositor e procurar a linha de código específica, como

'CreateUsersTable' => $baseDir . '/app/database/migrations/2013_07_04_014051_create_users_table.php',

e edite o caminho. Então sua reversão deve ficar bem.


Se você - como eu fiz - acabou de renomear um arquivo de migração, esta é a resposta que você está procurando! Obrigado.
Berdus

2
Você também pode simplesmente fazer "dumpautoload compositor"
FooBar

5

Concordo com as respostas atuais, só quero adicionar um pouco mais de informação.

Um novo recurso foi adicionado ao Laravel 5.3 e acima, que permitirá que você faça o backup de uma única migração:

php artisan migrate:rollback --step=1

Depois, exclua manualmente o arquivo de migração em database/migrations/my_migration_file_name.php

Esse é um ótimo recurso para quando você executa uma migração

Dessa forma, você pode remover com segurança a migração no laravel apenas em 2 etapas


0

Prefiro fazê-lo manualmente

  1. Exclua o modelo primeiro (se não precisar) mais do modelo
  2. Excluir a migração da ...database/migrationspasta
  3. Se você já migrou, ou seja, se já executou php artisan migrate, entre no phpmyadmin ou SQL (conforme o caso) e no banco de dados, exclua a tabela criada pela migração
  4. Ainda no seu banco de dados, na pasta de migrações, localize a linha com esse nome de arquivo de migração e exclua a linha.

Funciona para mim, espero que ajude!


-2

Isso funciona para mim:

  1. Excluí todas as tabelas do meu banco de dados, principalmente a tabela de migrações.
  2. php artisan migrate:refresh

no laravel 5.5.43

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.