Je voudrais
pour annuler uniquement:
Rolled back: 2015_05_15_195423_alter_table_web_directories
je cours
php artisan migrate:rollback
, 3 de ma migration sont annulées.
Rolled back: 2015_05_15_195423_alter_table_web_directories
Rolled back: 2015_05_13_135240_create_web_directories_table
Rolled back: 2015_05_13_134411_create_contacts_table
j'efface
à la fois de ma table web_directories
et ma contacts
involontairement. Je ne veux jamais que cela se produise, et si je ne peux annuler que celui-là, cette catastrophe ne se produira jamais.
laravel
laravel-4
laravel-5
database-migration
cyber8200
la source
la source
Réponses:
Si vous regardez dans votre
migrations
tableau, vous verrez que chaque migration a un numéro de lot. Ainsi, lorsque vous annulez, il annule chaque migration qui faisait partie du dernier lot.Si vous souhaitez uniquement annuler la toute dernière migration, incrémentez simplement le numéro de lot d'un. Ensuite, la prochaine fois que vous exécuterez la
rollback
commande, elle ne fera que restaurer cette migration car elle est dans un «lot» qui lui est propre.la source
migrations
SETbatch
= 2 WHEREmigration
= 'name_of_the_migration';Laravel 5.3+
Annulez une étape. Nativement.
Et voici la page de manuel: docs .
Laravel 5.2 et versions antérieures
Pas moyen de se passer de tracas. Pour plus de détails, consultez la réponse de Martin Bean .
la source
Chaque fois que vous annulez, vous obtenez le dernier lot de migration. utiliser la commande
la source
Si vous ne pouvez pas faire ce qui est dit par @Martin Bean, alors vous pouvez essayer une autre astuce.
Créez une nouvelle migration et dans ce fichier dans la méthode up () insérez ce qui est dans la méthode down () de la migration que vous souhaitez restaurer et dans la méthode down () insérez ce qui est dans la méthode up ().
par exemple, si votre migration d'origine est comme ça
puis dans le nouveau fichier de migration, faites cela
puis exécutez la migration, il supprimera la table. et si vous voulez à nouveau le récupérer, faites-le simplement revenir en arrière.
la source
mieux utiliser rafraîchir migrer
migration utilisée autrement
pour plus de détails sur la migration, voir
la source
Le meilleur moyen est de créer une nouvelle migration et d'y apporter les modifications requises.
Pire solution de contournement ( si vous avez accès à DB plus vous êtes d'accord avec une réinitialisation des données de cette table ):
your-specific-migration
your-specific-migration
php artisan migrate --path=/database/migrations/your-specific-migration.php
Cela forcera Laravel à exécuter cette migration spécifique car aucune entrée à ce sujet n'existe dans l'historique de migration de Laravel.
MISE À JOUR : La voie Laravel (Merci, @ thiago-valente)
Courir:
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
puis:
php artisan migrate
Cela va relancer cette migration particulière
la source
php artisan migrate:rollback --path=/database/migrations/your-specific-migration.php
Et enfinphp artisan migrate
Il peut être un peu tard pour répondre à cette question, mais voici une manière très bonne, propre et efficace de le faire, je le sens. J'essaierai d'être aussi complet que possible.
Avant de créer vos migrations, créez différents répertoires comme ceci:
Ensuite, lors de la création de vos migrations, exécutez la commande suivante (en utilisant vos tables comme exemple):
ou
ou
Les commandes ci-dessus créeront le fichier de migration dans le chemin de répertoire donné. Ensuite, vous pouvez simplement exécuter la commande suivante pour migrer vos fichiers via leurs répertoires attribués.
* Remarque: vous pouvez remplacer batch_1 par batch_2 ou batch_3 ou par tout autre nom de dossier dans lequel vous stockez les fichiers de migration. Tant qu'il reste dans le répertoire database / migrations ou dans un répertoire spécifié.
Ensuite, si vous devez annuler vos migrations spécifiques, vous pouvez annuler par lot comme indiqué ci-dessous:
ou
ou
L'utilisation de ces techniques vous permettra plus de flexibilité et de contrôle sur vos bases de données et toutes les modifications apportées à votre schéma.
la source
Annulez une étape. Nativement.
Rollback deux étapes. Nativement.
la source
Utilisez la commande "php artisan migrate: rollback --step = 1" pour restaurer la migration à 1 pas en arrière.
Pour plus d'informations, consultez le lien: - https://laravel.com/docs/master/migrations#running-migrations
la source
Si vous souhaitez annuler la dernière migration.
Si vous souhaitez annuler une migration spécifique, accédez à la table de migration et définissez la valeur la plus élevée de cet enregistrement par lot. Ensuite.
Actuellement, je travaille sur laravel 5.8 si je ne travaille pas sur une autre version de laravel, veuillez m'en informer.
la source
Migrez les tables une par une.
Modifiez le numéro de lot de la migration que vous souhaitez restaurer au plus élevé.
Exécutez migrate: rollback.
Ce n'est peut-être pas la façon la plus confortable de gérer des projets plus importants.
la source
Si vous souhaitez modifier le fichier de migration d'origine et le migrer à nouveau, vous pouvez utiliser ce package pour migrer. (Applicable à Laravel 5.4 ou version ultérieure)
Tout d'abord, installez le package dans votre projet Laravel:
Enregistrer la commande sur
app/Console/Kernel.php
:Maintenant, exécutez cette commande pour migrer votre fichier
la source
php artisan:migrate --path=database/migrations/my_migration.php
. Juste avant de le faire, assurez-vous que lamigrations
table n'a pas d'entrée pourmy_migration
.quelque chose comme ça
la source
1.) Dans la base de données, dirigez-vous vers la table des migrations et supprimez l'entrée de la migration liée à la table que vous souhaitez supprimer.
Exemple d'image de table de migration
2.) Ensuite, supprimez le tableau relatif à la migration que vous venez de supprimer de l'instruction 1.
Exemple de suppression d'image de tableau
3.) Enfin, effectuez les modifications souhaitées dans le fichier de migration de la table que vous avez supprimée de l'instruction no. 2 puis exécutez
php artisan migrate
pour migrer à nouveau la table.la source
Comme indiqué dans le manuel de Laravel , vous pouvez annuler un nombre spécifique de migrations en utilisant l'
--step
optionla source
Une autre alternative à celles mentionnées si vous devez le faire plusieurs fois avec les mêmes migrations. Personnellement, je pense que cela ajoute beaucoup de flexibilité à vos migrations.
Ajoutez
database/migrations
à votre objet de chargement automatique dans votrecomposer.json
comme ceci:Ajoutez ensuite
namespace Database\Migrations;
à tous vos fichiers de migration.Ensuite, exécutez
$ composer dump-autoload
pour actualiser votrecomposer.lock
fichier.Ensuite, en supposant que le nom de votre classe pour la migration est
AlterTableWebDirectories
, vous pouvez créer une commande comme celle-ci:Et écrivez cette logique dans votre
handle()
méthode:Cela fera exactement ce que vous voulez. Si vous souhaitez décrémenter le nombre de migrations au lieu de le supprimer, vous pouvez probablement comprendre comment modifier la
DB:raw
commande.Cette commande peut être étendue pour vous permettre de choisir dynamiquement la migration que vous supprimez en passant un argument dans la commande.
Ensuite, lorsque vous lisez pour migrer à nouveau ce fichier, vous pouvez simplement exécuter
php artisan migrate
et il ne migrera que celui-ci.Ce processus vous permet d'apporter des modifications spécifiques aux migrations sans avoir à effectuer une régénération complète et un amorçage à chaque fois.
Personnellement, je dois beaucoup faire ça parce que mes graines sont plutôt grosses.
la source
la source
Si vous avez accès à la base de données, vous avez une solution plus simple. Vous pouvez supprimer l'enregistrement de la table des migrations , puis simplement déposer la table. avec le client SQL.
Et peut utiliser
Comme beaucoup de réponses. Et rappelez-vous que le chemin est l'emplacement. Vous pouvez supprimer même la migration de module comme celle-ci. (Toute migration depuis anywhare)
Et rappelez-vous, si vous utilisez des serveurs Linux, faites attention à la casse. Vous devez ajouter comme / Database / Migrations avec le capital de départ.
la source