Recherche…


Migrations

Pour contrôler votre base de données dans Laravel, utilisez les migrations. Créer une migration avec artisan:

php artisan make:migration create_first_table --create=first_table

Cela générera la classe CreateFirstTable. A l'intérieur de la méthode up, vous pouvez créer vos colonnes:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class CreateFirstTable extends Migration
{
    public function up()
    {
        Schema::create('first_table', function (Blueprint $table) {
            $table->increments('id');
            $table->string('first_string_column_name');
            $table->integer('secont_integer_column_name');
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::drop('first_table');
    }
} 

A la fin de l'exécution de toutes vos classes de migration, vous pouvez exécuter la commande artisan:

php artisan migrate

Cela créera vos tables et vos colonnes dans votre base de données. Les autres commandes de migration utiles sont les suivantes:

  • php artisan migrate:rollback - Annule la migration de la dernière base de données
  • php artisan migrate:reset - Restauration de toutes les migrations de bases de données
  • php artisan migrate:refresh - Réinitialise et réexécute toutes les migrations
  • php artisan migrate:status - Affiche le statut de chaque migration

Modification des tables existantes

Parfois, vous devez modifier votre structure de tableau existante, comme renaming/deleting colonnes. Ce que vous pouvez accomplir en créant une nouvelle migration.Et Dans la méthode up de votre migration.

//Renaming Column.

public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->renameColumn('email', 'username');
    });
}

Dans l'exemple ci-dessus, vous renommez la email column de la users table des users table en username d' username . Alors que le code ci-dessous supprime un username d' users colonne de la table d' users .

IMPROTANT: Pour modifier des colonnes, vous devez ajouter la dépendance doctrine/dbal au fichier composer.json du projet et exécuter la composer update à composer update pour refléter les modifications.

//Droping Column
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->dropColumn('username');
    });
}

Les fichiers de migration

Les migrations dans une application Laravel 5 sont stockées dans le répertoire database/migrations . Leurs noms de fichiers sont conformes à un format particulier:

<year>_<month>_<day>_<hour><minute><second>_<name>.php

Un fichier de migration doit représenter une mise à jour du schéma pour résoudre un problème particulier. Par exemple:

2016_07_21_134310_add_last_logged_in_to_users_table.php

Les migrations de bases de données sont classées par ordre chronologique afin que Laravel sache dans quel ordre les exécuter. Laravel effectuera toujours des migrations du plus ancien au plus récent.

Générer des fichiers de migration

Créer un nouveau fichier de migration avec le nom de fichier correct chaque fois que vous devez modifier votre schéma serait une corvée. Heureusement, la commande artisan de Laravel peut générer la migration pour vous:

php artisan make:migration add_last_logged_in_to_users_table

Vous pouvez également utiliser les drapeaux --table et --create avec la commande ci-dessus. Celles-ci sont facultatives et ne concernent que la commodité. Elles insèrent le code correspondant dans le fichier de migration.

php artisan make:migration add_last_logged_in_to_users_table --table=users

php artisan make:migration create_logs_table --create=logs

Vous pouvez spécifier un chemin de sortie personnalisé pour la migration générée à l'aide de l'option --path . Le chemin est relatif au chemin de base de l'application.

php artisan make:migration --path=app/Modules/User/Migrations

Dans une migration de base de données

Chaque migration doit avoir une méthode up() et une méthode down() . Le but de la méthode up() est d'effectuer les opérations requises pour placer le schéma de base de données dans son nouvel état, et l'objectif de la méthode down() est d'inverser toutes les opérations effectuées par la méthode up() . Il est essentiel de s'assurer que la méthode down() inverse correctement vos opérations pour pouvoir annuler les modifications du schéma de base de données.

Un exemple de fichier de migration peut ressembler à ceci:

<?php

use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;

class AddLastLoggedInToUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dateTime('last_logged_in')->nullable();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('last_logged_in');
        });
    }
}

Lors de l'exécution de cette migration, Laravel générera le code SQL suivant à exécuter sur votre base de données:

ALTER TABLE `users` ADD `last_logged_in` DATETIME NULL

Exécution de migrations

Une fois votre migration écrite, son exécution appliquera les opérations à votre base de données.

php artisan migrate

Si tout s'est bien passé, vous verrez une sortie similaire à la suivante:

Migrated: 2016_07_21_134310_add_last_logged_in_to_users_table

Laravel est assez intelligent pour savoir quand vous effectuez des migrations dans l'environnement de production. S'il détecte que vous effectuez une migration destructive (par exemple, une migration qui supprime une colonne d'une table), la commande php artisan migrate vous demande une confirmation. Dans les environnements de livraison continue, cela peut ne pas être souhaité. Dans ce cas, utilisez l'indicateur --force pour ignorer la confirmation:

php artisan migrate --force

Si vous ne faites qu'exécuter des migrations, vous risquez de ne pas voir la présence d'une table de migrations dans votre base de données. Ce tableau est ce que Laravel utilise pour garder une trace des migrations déjà effectuées. Lors de l'émission de la commande de migrate , Laravel déterminera les migrations à exécuter, puis les exécutera dans l'ordre chronologique, puis mettra à jour la table de migrations en conséquence.

Vous ne devez jamais modifier manuellement la table des migrations , sauf si vous savez absolument ce que vous faites. Il est très facile de laisser par inadvertance votre base de données dans un état défectueux où vos migrations échoueront.

Faire reculer les migrations

Que se passe-t-il si vous souhaitez annuler la dernière migration, à savoir une opération récente, vous pouvez utiliser la commande awesome rollback . Mais rappelez-vous que cette commande annule uniquement la dernière migration, qui peut inclure plusieurs fichiers de migration.

php artisan migrate:rollback

Si vous êtes intéressé par la restauration de toutes vos migrations d'application, vous pouvez utiliser la commande suivante

php artisan migrate:reset 

De plus, si vous êtes paresseux comme moi et que vous souhaitez annuler et migrer avec une seule commande, vous pouvez utiliser cette commande.

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

Vous pouvez également spécifier le nombre d'étapes à effectuer avec l'option d' step . Comme cela va annuler 1 étape.

php artisan migrate:rollback --step=1


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow