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
Globalz
fonte

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
malisokan
fonte
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.

Jason Lewis
fonte
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).

joash
fonte
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.

Stephane
fonte
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.

JR Tan
fonte
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

Udhav Sarvaiya
fonte
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!

DAVID AJAYI
fonte
-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

ederrafo
fonte