web-dev-qa-db-fra.com

Laravel 5.4 Migration de tables spécifiques

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 (une seule migration), car dès maintenant, chaque fois que survient une modification, j'utilise php artisan migrate:refresh et tous les champs sont réinitialisés.

17
Martney Acha

Commencez par créer un fichier migration pour votre table, comme suit:

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 dossier dans migrations dossier nouvellement créé migration déplacé/copié dans test dossier et exécuté sous la commande dans votre terminal/cmd like:

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

Il suffit de regarder la table migrations dans votre base de données, il y aura une liste de nom de fichier de migration et la valeur du 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 souhaitez simplement annuler la migration 2016_09_07_103432_create_tabel_roles, Changez sa valeur de lot de migration en 2, qui est la plus élevée parmi toutes, puis exécutez simplement ce qui suit.

php artisan migrate:rollback

Ici, seul le tableau avec la valeur de lot 2 sera annulé. Maintenant, modifiez cette table et exécutez la commande suivante de la console.

php artisan migrate

La valeur de lot dans la table migrations définit l'ordre des migrations. Lorsque vous annulez, les migrations les plus récentes ou ayant la valeur de lot la plus élevée sont annulées en premier, puis les autres. Ainsi, vous pouvez modifier la valeur de la base de données, puis restaurer 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 dans certains cas où la restauration d'une seule table ne viole pas l'intégrité entre les tables.

J'espère que tu as compris.

36
Sagar Gautam

Je voulais juste poster une autre solution, que je pense mérite d'être mentionnée.

  1. Recherchez la ligne avec votre nom de migration dans la table des migrations et supprimez-la. Il devrait ressembler à ceci: 2016_06_01_000001_create_oauth_auth_codes_table
  2. Supprimez votre table de la base de données, par exemple. DROP TABLE oauth_auth_codes
  3. Run php artisan migrate

Il ne fera que migrer la table dont vous avez besoin et ne touchera rien d'autre

4
tylik

Vous devez placer le (s) fichier (s) dans un nouveau répertoire (ex: sélectionné), puis appliquer

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

si vous avez besoin d'un retour en arrière:

php artisan migrate:rollback  --path=/database/migrations/selected

Remarque:

php artisan migrate:refresh

cela va restaurer et ensuite migrer tous les fichiers de migration dans le répertoire par défaut (/ database/migrations)

3
Ahmad Zahabi

Vous ne pouvez que revenir en arrière:

php artisan migrate:rollback

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

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

php artisan migrate:rollback --step=1

Quelques astuces sont disponibles ici:

Annuler une migration spécifique à Laravel

3
Jed

Supprimez la table et supprimez son enregistrement de la table de migration.

Après cela, vous lancez à nouveau la migration: 

php artisan migrate
2
sskoko

Ou vous pouvez simplement supprimer le nom du fichier de migration de votre base de données, dans le tableau "migrations", puis exécuter: php artitsan migration

2
Lasha Shonia
php artisan help migrate

Vous verrez l'option:

--path [= PATH] Le chemin des fichiers de migration à exécuter

En passant, vous pouvez probablement indiquer le dossier racine du fichier que vous souhaitez migrer:

php artisan migrate --path=/database/migrations/sample.php

Ou bien, vous pouvez créer un nouveau dossier dans les migrations, puis migrer tous les fichiers de migration souhaités à l'intérieur:

php artisan migrate --path=/database/migrations/new_folder
2
manh quan nguyen

Vous pouvez essayer d'utiliser l'option --path = pour définir le sous-dossier que vous souhaitez exécuter et y placer des migrations spécifiques.

Sinon, vous devrez supprimer les tables de référence et les tables de base de données et de migration, ce qui n’est pas idéal: /

1
Chris WB

Si vous souhaitez créer une autre table, créez simplement un nouveau fichier de migration. Ça va marcher.

Si vous créez une migration nommée users_table avec id, first_name, last_name. Vous pouvez créer un fichier de migration comme

    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_name',255);
            $table->string('last_name',255);
            $table->rememberToken();
            $table->timestamps();
        });
    }
    public function down()
    {
        Schema::dropIfExists('users');
    }

Si vous souhaitez ajouter un autre fichier comme "status" sans migrer: actualisez. Vous pouvez créer un autre fichier de migration du type "add_status_filed_to_users_table".

public function up()
{
    Schema::table('users', function($table) {
        $table->integer('status');
    });
} 

Et n'oubliez pas d'ajouter l'option de restauration:

public function down()
{
    Schema::table('users', function($table) {
        $table->dropColumn('status');
    });
}

Et lorsque vous exécutez la migration avec php artitsan migration, il ne fait que migrer le nouveau fichier de migration.

Mais si vous ajoutez "statut" dans le premier fichier de gestion (users_table), lancez la migration. Ce n'est rien pour migrer. Vous devez exécuter php artisan migrate:refresh.

J'espère que cette aide.

1
Nguyen Hoang
0
Hasan