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 ?
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
.
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.
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.
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.
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.
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...
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
.
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.
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