118 votes

Migration des tables spécifiques à Laravel 5.4

Bonjour, lisez toute la documentation incluse ici dans https://laravel.com/docs/5.4/migrations .

Existe-t-il un moyen de migrer un certain fichier de migration (1 seule migration), parce qu'actuellement, à chaque fois qu'il y a un changement, j'utilise php artisan migrate:refresh et tous les champs sont remis à zéro.

173voto

Vous devez d'abord créer un migration pour votre table comme :

public function up()
    {
        Schema::create('test', function (Blueprint $table) {
            $table->increments('id');
            $table->string('fname',255);
            $table->string('lname',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }

Après avoir créé test dans le dossier migrations puis le dossier nouvellement créé migration déplacé/copié dans test et exécutez la commande ci-dessous dans votre terminal/cmd comme :

php artisan migrate --path=/database/migrations/test/

1 votes

Merci. C'est exactement ce que je cherchais.

5 votes

Php artisan migrate --path=database/migrations/test/ a fonctionné pour moi

0 votes

Si cela ne fonctionne pas, vous avez une meilleure réponse à l'adresse suivante stackoverflow.com/questions/19102197/

135voto

Wissem SASSI Points 120

Vous devriez ajouter le chemin à votre fichier de migration pour rafraîchir juste cette table et exécuter

php artisan migrate:refresh --path=/database/migrations/fileName.php

1 votes

Bon travail. Rien ne fonctionnait mais votre solution a fonctionné. Merci beaucoup.

0 votes

Exactement ce que je cherchais :) Merci mon pote

0 votes

Parfois, ce sera database/migrations/fileName.php sans la première barre oblique inversée.

58voto

Sagar Gautam Points 4374

Il suffit de regarder le migrations dans votre base de données, il y aura une liste de nom de fichier de migration et de valeur de numéro de lot.

Supposons que vous ayez la structure suivante,

id     migration                                           batch

1      2014_10_12_000000_create_users_table                  1 
2      2014_10_12_100000_create_password_resets_table        1
3      2016_09_07_103432_create_tabel_roles                  1

Si vous voulez juste faire un retour en arrière 2016_09_07_103432_create_tabel_roles migration, modifiez la valeur du lot de migration à 2, qui est la plus élevée de toutes, puis exécutez ce qui suit.

php artisan migrate:rollback

Ici, seule la table avec la valeur de lot 2 sera annulée. Maintenant, apportez des modifications à cette table et exécutez la commande de console suivante.

php artisan migrate

Valeur du lot dans le migrations La table définit l'ordre des migrations. Lorsque vous effectuez un retour en arrière, les migrations qui sont les plus récentes ou qui ont la valeur de lot la plus élevée sont ramenées en premier et ensuite les autres. Ainsi, vous pouvez changer la valeur dans la base de données et ensuite annuler un fichier de migration particulier.

Bien que ce ne soit pas une bonne idée de changer le numéro de lot à chaque fois en raison de la relation entre la structure de la table, nous pouvons utiliser ce cas pour certains cas où le retour en arrière d'une seule table ne viole pas l'intégrité entre les tables.

J'espère que vous comprenez.

0 votes

@MartneyAcha Je suis heureux que vous ayez trouvé une solution à votre problème.

0 votes

Bonne explication. Si vous avez une relation de clé étrangère dans votre table, cela ne fonctionnera pas.

0 votes

@OgbonnaVitalis Merci, ce sera plus facile pour les tables indépendantes. La réponse acceptée donne la manière exacte de revenir en arrière et de migrer une seule table. Pour plusieurs tables indépendantes, cela fonctionnera.

5voto

tylik Points 98

Je voulais juste poster une autre solution, qui je pense vaut la peine d'être mentionnée.

  1. Trouvez la ligne portant le nom de votre migration dans la table des migrations et supprimez-la. Cela devrait ressembler à ceci : 2016_06_01_000001_create_oauth_auth_codes_table
  2. Supprimer votre table de la base de données, par exemple DROP TABLE oauth_auth_codes
  3. Exécuter php artisan migrate

Il ne migrera que la table dont vous avez besoin, et ne touchera rien d'autre.

3voto

Jed Points 146

Vous ne pouvez que faire marche arrière :

php artisan migrate:rollback

https://laravel.com/docs/5.4/migrations#rolling-back-migrations

Vous pouvez spécifier le nombre de migrations à annuler en utilisant l'option 'step' :

php artisan migrate:rollback --step=1

Quelques astuces sont disponibles ici :

Annulation d'une migration spécifique dans Laravel

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X