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.
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/
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.
Je voulais juste poster une autre solution, que je pense mérite d'être mentionnée.
Il ne fera que migrer la table dont vous avez besoin et ne touchera rien d'autre
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)
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:
Supprimez la table et supprimez son enregistrement de la table de migration.
Après cela, vous lancez à nouveau la migration:
php artisan migrate
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
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
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: /
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.
Vous pouvez utiliser ceci.
-> https://packagist.org/packages/sayeed/custom-migrate
-> https://github.com/nilpahar/custom-migration/
c'est très facile à utiliser