web-dev-qa-db-fra.com

Restaurer une migration spécifique dans Laravel

Je voudrais

pour revenir en arrière uniquement:

Rolled back: 2015_05_15_195423_alter_table_web_directories


Je cours

php artisan migrate:rollback, 3 de ma migration sont en train de revenir en arrière.

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

mon web_directories et mon contacts table involontairement. Je ne veux jamais que cela se produise, et si je ne peux que revenir en arrière sur ce problème en particulier, ce désastre ne se produira jamais.

179
kyo

Si vous consultez la table migrations, vous verrez que chaque migration porte un numéro de lot. Ainsi, lorsque vous annulez, chaque migration faisant partie du dernier lot est annulée.

Si vous souhaitez uniquement annuler la toute dernière migration, incrémentez simplement le numéro de lot d'une unité. Ensuite, la prochaine fois que vous exécuterez la commande rollback, elle ne fera que restaurer cette migration, car elle constitue un "lot" distinct.

116
Martin Bean

Laravel 5.3+

Faites un retour en arrière une étape. Nativement.

php artisan migrate:rollback --step=1

Et voici la page de manuel: docs .


Laravel 5.2 et avant

Pas moyen de se passer de tracas. Pour plus de détails, consultez Martin Bean answer .

195
Yauheni Prakopchyk

Chaque fois que vous annulez, vous obtenez le dernier lot de migration. utiliser la commande

php artisan migrate:rollback --step=1
20
PAUL KIARIE

Si vous ne pouvez pas faire ce que @Martin Bean dit, vous pouvez essayer un autre tour.

Créez une nouvelle migration et sur ce fichier dans la méthode up () insérez ce qui est dans la méthode down () de la migration que vous souhaitez annuler 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

public function up()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id')->unsigned();
        $table->string('name');
    });
}
public function down()
{
    Schema::drop('users');
}

puis dans un nouveau fichier de migration faire ceci

public function up()
{
    Schema::drop('users');
}
public function down()
{
    Schema::create('users', function(Blueprint $table)
    {
        $table->increments('id')->unsigned();
        $table->string('name');
    });
}

puis lancez la migration, cela supprimera la table. et si vous voulez encore une fois revenir en arrière, annulez-le.

16
Nehal Hasnayeen

Je pense qu'il est peut-être un peu tard pour répondre à cette question, mais voici une façon très efficace, propre et efficace de le faire. Je vais essayer d'être aussi complet que possible.

Avant de créer vos migrations, créez différents répertoires comme ceci:

    database
       | 
       migrations
            |
            batch_1
            batch_2
            batch_3

Ensuite, lors de la création de vos migrations, exécutez la commande suivante (en utilisant vos tables comme exemple):

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_1

ou

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_2

ou

     php artisan make:migration alter_table_web_directories --path=database/migrations/batch_3

Les commandes ci-dessus créeront le fichier de migration dans le chemin de répertoire indiqué. Ensuite, vous pouvez simplement exécuter la commande suivante pour migrer vos fichiers via leurs répertoires attribués.

    php artisan migrate alter_table_web_directories --path=database/migrations/batch_1

* Remarque: vous pouvez modifier batch_1 en batch_2 ou batch_3 ou le nom du 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 effectuer une restauration par lot, comme indiqué ci-dessous:

    php artisan migrate:rollback --step=1
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_1

ou

    php artisan migrate:rollback --step=2
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_2

ou

    php artisan migrate:rollback --step=3
                    or try
php artisan migrate:rollback alter_table_web_directories --path=database/migrations/batch_3

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.

8
Andre F.

Utilisez la commande "php artisan migrate: rollback --step = 1" pour restaurer la migration en une étape.

Pour plus d'informations, consultez le lien: - https://laravel.com/docs/master/migrations#running-migrations

4
Shah-Kodes

Faites un retour en arrière une étape. Nativement.

php artisan migrate:rollback --step=1

Revenir en arrière en deux étapes. Nativement.

php artisan migrate:rollback --step=2
4
Terminal

préférable d'utiliser actualiser migrer

Vous pouvez annuler et remigrer un nombre limité de migrations en fournissant l'option step à la commande d'actualisation. Par exemple, la commande suivante va restaurer et remigrer les deux dernières migrations:

php artisan migrate:refresh --step=2

sinon utilisé annuler la migration

Vous pouvez annuler un nombre limité de migrations en fournissant l'option step à la commande rollback. Par exemple, la commande suivante annulera les trois dernières migrations:

php artisan migrate:rollback --step=3

pour plus de détails sur la migration voir

4
Jignesh Joisar

Migrez les tables une par une.

Modifiez le numéro de lot de la migration que vous souhaitez restaurer au maximum.

Exécutez migrate: rollback.

Peut-être pas la manière la plus confortable de traiter des projets plus importants.

3
Jeffz

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 ultérieur)

Tout d’abord, installez le paquet dans votre projet Laravel:

composer require caloskao/migrate-specific

Enregistrer la commande sur app/Console/Kernel.php:

protected $commands = [
    \CalosKao\MigrateSpecific::class
];

Maintenant, lancez cette commande pour migrer votre fichier

php artisan migrate:specific database/migrations/table.php
2
Calos Kao
INSERT INTO Homestead.bb_migrations (`migration`, `batch`)  VALUES ('2016_01_21_064436_create_victory_point_balance_table', '2')

quelque chose comme ça

1
Harry Bosh

1.) Dans la base de données, accédez à 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 la table liée à la migration que vous venez de supprimer de l'instruction 1.

Exemple de suppression d'image de table

3.) Enfin, apportez les modifications souhaitées au 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.

1
Kidali Kevin

Comme indiqué dans le manuel Laravel _ , vous pouvez annuler un nombre spécifique de migrations à l'aide de l'option --step.

php artisan migrate:rollback --step=5
0
Slav Levin

Le meilleur moyen est de créer une nouvelle migration et d'y apporter les modifications requises.

Solution de contournement dans le pire des cas (if vous avez accès à la base de données plus vous êtes d'accord pour une réinitialisation des données de cette table):

  1. Allez dans la base de données et supprimez/renommez l'entrée de migration pour your-specific-migration
  2. Supprimez la table créée par your-specific-migration
  3. Exécuter php artisan migrate --path=/database/migrations/your-specific-migration.php

Ceci forcera laravel à exécuter cette migration spécifique car aucune entrée à ce sujet n'existe dans l'historique de migration de Laravel.

0
Deepak Thomas