Supprimer la migration en toute sécurité à Laravel

206

Dans Laravel, il semble y avoir une commande pour créer une migration, mais pas pour la supprimer.

Créer une commande de migration:

php artisan migrate:make create_users_table

Si je souhaite supprimer la migration, puis-je simplement supprimer en toute sécurité le fichier de migrations correspondant dans le dossier base de données / migrations?

Fichier de migrations:

2013_05_31_220658_create_users_table
Globalz
la source

Réponses:

375

J'ai accidentellement créé une migration avec un mauvais nom (commande:) php artisan migrate:make. Je n'ai pas exécuté ( php artisan migrate) la migration, j'ai donc décidé de la supprimer. Mes pas:

  1. Supprimez manuellement le fichier de migration sous app/database/migrations/my_migration_file_name.php
  2. Réinitialisez les fichiers de chargement automatique du composeur: composer dump-autoload
  3. Se détendre

Si vous avez exécuté la migration ( php artisan migrate), vous pouvez le faire:

a) Exécuter migrate:rollback- c'est la bonne façon d'annuler la dernière migration (Thnx @Jakobud)

b) Si migrate:rollbackcela ne fonctionne pas, faites-le manuellement (je me souviens des bugs avec migrate: rollback dans les versions précédentes):

  1. Supprimez manuellement le fichier de migration sous app/database/migrations/my_migration_file_name.php
  2. Réinitialisez les fichiers de chargement automatique du composeur: composer dump-autoload
  3. Modifier votre base de données: supprimez la dernière entrée de la table des migrations
malisokan
la source
2
Merci. Le gottcha pour moi après avoir supprimé une migration oubliait d'exécuter le composeur dump-autoload
Theo Kouzelis
7
Si vous avez exécuté la migration, la méthode "appropriée" consiste à exécuter migrate:rollbackpour annuler la migration, puis à supprimer le fichier de migration et à vider le chargement automatique. Pas besoin de pirater la base de données ou la table des migrations.
Jake Wilson
excellente réponse pour les étapes suivantes (php artisan migrate) (Y)
Imran Khan
Mon Dieu et moi-même nous sommes tourmentés quand j'avais tort. Je vous remercie.
Pablo Contreras
4. Supprimez le tableau réel de la base de données
Jin
64

Si la migration a été exécutée (lire: migré), vous devez annuler votre migration pour effacer l'historique de votre table de base de données. Une fois rétrogradé, vous devriez pouvoir supprimer votre fichier de migration en toute sécurité, puis recommencer la migration.

Jason Lewis
la source
Il n'a cependant pas exécuté la migration. Vous ne pouvez pas annuler ce que vous n'avez pas fait, n'est-ce pas?
Stephane
9
Non, vous ne pouvez pas, mais si c'est le cas, aucun historique ne devrait être stocké dans la base de données des migrations, ce qui signifie que vous pouvez supprimer le fichier en toute sécurité.
Jason Lewis
14
 php artisan migrate:fresh

Devrait faire le travail, si vous êtes en développement et que le résultat souhaité est de tout recommencer.

En production, ce n'est peut-être pas la chose souhaitée, vous devriez donc être annoncé. (La commande migrate: fresh supprimera toutes les tables de la base de données, puis exécutera la commande migrate).

joash
la source
5
3 votes positifs? le PO a demandé un moyen de supprimer une migration, pas de détruire et d'actualiser la base de données entière. C'est un conseil horrible, ne le faites que si vous savez ce que vous faites.
revoir
veuillez lire la différence entre migrate: refresh et migrate: fresh que vous avez vu pour décrire le premier, le plus tard fait une réinitialisation partielle en évitant le travail manuel!
joash
1
migrate: fresh supprime immédiatement TOUTES les tables et réexécute les migrations comme s'il était exécuté pour la première fois. Il n'y a rien de partiel à ce sujet .. toutes les données auront disparu. Cela résoudra le problème mais ce n'est pas une réponse valide à la question.
revoir
12

Vous devrez probablement également supprimer l'entrée de la table des migrations.

Stéphane
la source
7

J'ai accidentellement créé deux fois create_users_table. Il a remplacé certaines classes et transformé la restauration en erreur ErrorException.

Ce que vous devez faire est de trouver autoload_classmap.php dans le dossier vendeur / compositeur et recherchez la ligne de code spécifique telle que

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

et modifier le chemin. Ensuite, votre restauration devrait être correcte.

JR Tan
la source
Si vous - comme je l'ai fait - venez de renommer un fichier de migration, c'est la réponse que vous cherchez! Merci.
Berdus
2
Vous pouvez également faire simplement "composer dumpautoload"
FooBar
5

Je suis d'accord avec les réponses actuelles, je veux juste ajouter un peu plus d'informations.

Une nouvelle fonctionnalité a été ajoutée à Laravel 5.3 et versions ultérieures qui vous permettra d'annuler une seule migration:

php artisan migrate:rollback --step=1

après, supprimez manuellement le fichier de migration sous database/migrations/my_migration_file_name.php

Ceci est une excellente fonctionnalité lorsque vous exécutez une migration

De cette façon, vous pouvez supprimer en toute sécurité la migration dans laravel uniquement en 2 étapes

Udhav Sarvaiya
la source
0

Je préfère le faire manuellement

  1. Supprimez d'abord le modèle (si ce n'est pas le cas), vous aurez besoin du modèle plus longtemps
  2. Supprimer la migration du ...database/migrationsdossier
  3. Si vous avez déjà migré, c'est-à-dire si vous avez déjà exécuté php artisan migrate, connectez-vous à votre phpmyadmin ou SQL (selon le cas) et dans votre base de données, supprimez la table créée par la migration
  4. Toujours dans votre base de données, dans le dossier des migrations, recherchez la ligne avec ce nom de fichier de migration et supprimez la ligne.

Fonctionne pour moi, j'espère que ça aide!

DAVID AJAYI
la source
-2

Cela fonctionne pour moi:

  1. J'ai supprimé toutes les tables de ma base de données, principalement la table des migrations.
  2. php artisan migrate:refresh

dans laravel 5.5.43

ederrafo
la source