Modification d’une table à l’aide d’un fichier de migration Laravel

Une fois les tables de la base de données créées, il est possible de les modifier. L'utilisation de fichiers de migration est la solution privilégiée.

Une fois la base de données créée, il est préférable de créer un fichier de migration qui modifie la structure d'une table plutôt que de modifier un fichier de migration existant.

Il sera ainsi plus facile de reproduire les modifications sur la base de données en ligne. Ceci permettra également de faire un suivi des versions de la base de données.

▼Publicité

Ajout d'une dépendance

Avant d'utiliser un fichier de migration qui modifie la structure d'une table, il faut ajouter une dépendance à notre installation Laravel. Ceci n'aura à être fait qu'une seule fois pour tout le projet.

La commande composer suivante permettra d'y arriver :

Console Vagrant SSH

composer require doctrine/dbal

Ceci ajoutera une ligne dans le fichier composer.json qui est placé directement dans le dossier de votre projet puis téléchargera les fichiers requis dans le dossier vendor.

La ligne qui a été automatiquement ajoutée est surlignée dans cet extrait :

Fichier composer.json

{

    "name": "laravel/laravel",

    "description": "The Laravel Framework.",

    "keywords": ["framework", "laravel"],

    "license": "MIT",

    "type": "project",

    "require": {

        "php": ">=5.6.4",

        "laravel/framework": "5.4.*",

        "doctrine/dbal": "^2.5"

    },

Si vous préférez éditer manuellement le fichier composer.json plutôt que de faire un composer require, il vous faudra effectuer une étape supplémentaire. Ceci téléchargera les fichiers nécessaires, ce qui aurait été fait automatiquement par un composer update.

Console Vagrant SSH

composer update

Générer le fichier de migration

Si vous désirez, par exemple, modifier la table produits afin de changer le champ couleur pour couleur_id, qui pointera vers la table couleurs, vous utiliserez la commande :

Console Vagrant SSH

php artisan make:migration change_produits_couleur_column --table produits

Le nom du fichier de migration peut être n'importe quoi, en autant qu'il décrive bien ce qui est fait dans ce fichier.

Éditer le fichier de migration

Dans le fichier de migration, vous entrerez le code suivant. La modification du nom de la colonne sera faite dans la méthode up(). L'opération inverse sera codée dans la méthode down().

Les ajustements à la table seront faits à l'aide de Schema::table().

Fichier de migration (PHP)

class ChangeProduitsCouleurColumn extends Migration

{

    /**

     * Run the migrations.

     *

     * @return void

     */

    public function up()

    {

        Schema::table('produits', function(Blueprint $table) {

            $table->dropColumn('couleur');

            $table->integer('couleur_id')->unsigned()->after('description');

 

            $table->foreign('couleur_id')->references('id')->on('couleurs');

        });

    }

 

    /**

     * Reverse the migrations.

     *

     * @return void

     */

    public function down()

    {

        Schema::table('produits', function(Blueprint $table) {

            $table->dropForeign('produits_couleur_id_foreign');

 

            $table->dropColumn('couleur_id');

            $table->string('couleur')->after('description');

        });

    }

}

Les principales fonctions de modification sont :

  • Ajout d'une colonne à l'aide de la même syntaxe que lors de la création de la table. Ne pas oublier de préciser sa position à l'aide de after().
  • dropColumn()
  • renameColumn()
  • change() (si on ne fait que changer les attributs de la colonne)
  • dropForeign()

Pour plus de détails : https://laravel.com/docs/master/migrations#columns

Remarquez que lorsque la méthode up() ajoute une contrainte d'intégrité référentielle, la méthode down() devra supprimer cette contrainte avant de supprimer la clé étrangère impliquée dans la relation. Le nom donné à la contrainte est toujours sous la forme nomtable_nomcle_foreign.

Exécuter les fichiers de migration

Avant d'exécuter les fichiers de migration, surtout lors de la modification d'une table, il est conseillé de vérifier les lignes de code SQL qui seront générées :

Console Vagrant SSH

php artisan migrate --pretend

Pour rendre les modifications effectives :

Console Vagrant SSH

php artisan migrate

Merci de partager ! Share on FacebookTweet about this on TwitterShare on Google+Share on LinkedInPin on PinterestShare on StumbleUponEmail this to someone
Catégories