laravel 4 artisan - comment revenir à un État de migration spécifique?

Dis que j'ai a.php, b.php, c.php et d.php fichiers de classes de migration. Comment revenir à un État de migration spécifique, l'état défini dans b.php par exemple, avec la commande artisan ?

23
demandé sur Antonio Carlos Ribeiro 2013-07-17 14:23:53

9 réponses

, j'ai peur, vous ne pouvez pas le faire directement.

Vous pouvez: 1, annule la dernière opération de Migration (toutes les migrations ont été exécutées dans le dernier lot)

php artisan migrate:rollback

2, annule toutes les migrations

php artisan migrate:reset

3, annule toutes les migrations et les exécute à nouveau

php artisan migrate:refresh  
php artisan migrate:refresh --seed

Dans votre situation, modifiez b.php et c'est la méthode up(), puis exécutez la commande artisan migrate:refresh.

37
répondu Andreyco 2017-02-10 17:41:20

Il existe un moyen de le pirater en éditant manuellement la base de données. Dans la table migrations, Modifiez la colonne batch en donnant à la dernière migration un numéro de lot différent. Soyez conscient qu'ils sont en ordre croissant, alors modifiez en conséquence. Cela permet de suivre les migrations qui ont été appliquées séparément.

Puis exécutez artisan:rollback et il annulera le dernier "lot".

Donc, si vous voulez les séparer tous, alors commencez par le haut et donnez chaque 1,2,3,4,5 et ainsi de suite... Vous pouvez voir qu'il est facilement scriptable, et vous pouvez créer une commande artisan si vous souhaitez séparer toutes vos migrations.

28
répondu Paul Cristea 2015-04-22 04:10:27

Dans mon expérience. Je ne migre jamais: rollback. Je créerais généralement une autre migration qui fait tous les changements dont j'ai besoin pour "annuler/annuler" les migrations précédentes.

De cette façon, vous pouvez être flexible si vous voulez annuler 2-x Pas en arrière, vous pouvez simplement créer une nouvelle migration pour effectuer les modifications que vous voulez, puis exécuter la nouvelle migration par php artisan migrate.

5
répondu junjet trasmonte 2014-07-02 01:10:24

En fait, il n'y a pas cette fonctionnalité (encore). étonnamment

La meilleure idée, est de créer un nouveau fichier backtob.php et faire son appel vers le bas de vos autres fichiers de migration. Pour éviter le copier-coller, Vous pouvez faire quelque chose comme ceci:

class BacktoB {
  public function up () {
     // the database is in the after D state //
     $migrateD = new D();
     $migrateD->down();
     // the database is in the after C state //
     $migrateC = new C();
     $migrateC->down();
     // the database is in the before C state //
     // before C = B //
  }
  public function down () {
     // the database is in the B state //
     $migrateC = new C();
     $migrateC->up();
     // the database is in the after C state //
     $migrateD = new D();
     $migrateD->up();
     // the database is in the after D state //
  }
}

Comme vous pouvez le voir, vous pouvez créer le haut et vers le bas appelant le haut et le bas de ces migrations que vous voulez revenir.

, Il n'est pas l'idéal, mais c'est ce que nous pouvons faire.

3
répondu Thiago Mata 2015-03-13 19:29:48

Laravel 5.3

Avec Laravel 5.3, il n'y a pas besoin de scripts lourds. Comme il permet de restaurer un nombre donné de migrations.

php artisan migrate:rollback --step=1

Voici le manuel de page pour référence.

3
répondu Yauheni Prakopchyk 2016-06-13 16:53:08

Si vous voulez vraiment - Vous pouvez écrire une fonction personnalisée qui interroge la table migrations, recherche le fichier que vous recherchez et calcule le nombre de fois à annuler - puis fait une boucle de 'migrate:rollback' jusqu'à ce que vous atteigniez la migration requise...

2
répondu Laurence 2013-07-17 11:57:18

Il y a un moyen facile mais sale:

Si vous avez des migrations a.php, b.php et c.php et souhaitez reprendre c et b, vous pouvez simplement modifier a.php de telle sorte qu'il y aura une erreur de syntaxe... déposer un point-virgule ou quelque chose.

Ainsi, lorsque vous exécutez php artisan migrate:rollback, il va de restauration c et b et arrête avec une erreur dans a. À partir de là, la restauration de c et b, considérée comme la dernière opération de migration.

N'oubliez pas de corriger toute erreur vous avez fait exprès dans a.php.

1
répondu mper 2015-09-28 14:09:18

Puisque Laravel fournit simplement php artisan migrate: rollback pour annuler votre script de migration, la meilleure façon de restaurer votre script de migration sélectionné est de créer un nouveau script de migration et de mettre le script dans votre méthode down (sur votre script de migration sélectionné) au script de migration nouvellement créé. Espérons que cette aide.

0
répondu qatz 2014-04-03 08:03:59

Utilisez la commande php artisan migrate: rollback.

php artisan migrate:rollback

Pour voir ce que fera rollback, utilisez l'option --pretend.

php artisan migrate:rollback --pretend

Vous pouvez également spécifier une connexion à la base de données autre que celle par défaut.

php artisan migrate:rollback --pretend --database=other-one
0
répondu HeadAndTail 2017-11-17 06:10:08