Contactez-nous

Etape 1 : Modèle `Note` et migration (titre, contenu)

Apprenez à créer un modèle Eloquent `Note` et sa migration associée dans Laravel pour définir la structure de votre table de notes avec les champs titre et contenu.

Introduction aux modèles Eloquent et aux migrations dans Laravel

La première étape concrète de la création de notre mini-gestionnaire de notes consiste à définir comment nos données seront structurées et stockées. Dans Laravel, cela se fait principalement à l'aide de deux concepts puissants : les modèles Eloquent et les migrations de base de données. Un modèle Eloquent est une classe qui représente une table dans votre base de données et vous permet d'interagir avec cette table de manière orientée objet. Chaque instance d'un modèle correspond à une ligne dans la table.

Les migrations, quant à elles, sont comme un système de contrôle de version pour votre schéma de base de données. Elles vous permettent de définir, modifier et partager la structure de votre base de données de manière programmatique et reproductible. Au lieu d'écrire des requêtes SQL manuelles pour créer ou modifier des tables, vous décrivez ces changements dans des fichiers de migration PHP. Cela facilite grandement la collaboration et la maintenance de l'application au fil du temps.

Ensemble, les modèles et les migrations fournissent une manière élégante et efficace de gérer la couche de persistance de votre application Laravel. Pour notre projet, nous allons créer un modèle `Note` qui représentera une note individuelle, et une migration pour créer la table `notes` correspondante, qui contiendra un titre et le contenu de chaque note.

Génération du modèle `Note` et de sa migration avec Artisan

Laravel fournit un outil en ligne de commande très pratique, nommé Artisan, qui simplifie de nombreuses tâches courantes, y compris la création de modèles et de migrations. Pour créer notre modèle `Note` et le fichier de migration associé en une seule commande, nous allons utiliser la commande suivante dans notre terminal, à la racine de notre projet Laravel :

php artisan make:model Note -m

Décortiquons cette commande :

  • php artisan : C'est l'exécutable de l'interface en ligne de commande Artisan.
  • make:model : C'est la commande Artisan spécifique pour créer un nouveau modèle Eloquent.
  • Note : C'est le nom que nous donnons à notre modèle. Par convention, les noms de modèles sont en PascalCase et au singulier. Laravel en déduira que la table correspondante s'appellera `notes` (pluriel et snake_case).
  • -m ou --migration : C'est une option qui indique à Artisan de créer également un fichier de migration pour ce modèle.

Après avoir exécuté cette commande, Laravel créera deux fichiers :

  • Un fichier de modèle dans app/Models/Note.php.
  • Un fichier de migration dans le répertoire database/migrations/, avec un nom de fichier qui inclut la date et l'heure actuelles, suivi de create_notes_table.php.

Le contenu initial du fichier app/Models/Note.php sera similaire à ceci :

Pour l'instant, ce modèle est assez simple. La classe Note hérite de la classe Model de Laravel, ce qui lui donne accès à toutes les fonctionnalités d'Eloquent. Le trait HasFactory est utilisé pour la génération de fausses données (factories), ce qui est utile pour les tests ou le peuplement de la base de données, mais nous ne l'utiliserons pas directement dans ce projet de base.

Définition de la structure de la table `notes` dans le fichier de migration

Maintenant que nous avons notre fichier de migration, ouvrons-le. Son nom ressemblera à YYYY_MM_DD_HHMMSS_create_notes_table.php (où YYYY_MM_DD_HHMMSS est la date et l'heure de création). Ce fichier contient une classe avec deux méthodes principales : up() et down().

La méthode up() est exécutée lorsque nous appliquons la migration (pour créer la table, ajouter des colonnes, etc.). La méthode down() est exécutée lorsque nous annulons la migration (pour supprimer la table, enlever des colonnes, etc.), permettant de revenir en arrière. Nous allons modifier la méthode up() pour définir les colonnes de notre table notes. Nous avons besoin d'une colonne pour le titre (title) et une pour le contenu (content) de la note.

Modifiez la méthode up() de votre fichier de migration comme suit :

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

return new class extends Migration
{
    /**
     * Run the migrations.
     */
    public function up(): void
    {
        Schema::create('notes', function (Blueprint $table) {
            $table->id(); // Crée une colonne 'id' BIGINT UNSIGNED auto-incrémentée (clé primaire)
            $table->string('title'); // Crée une colonne 'title' de type VARCHAR (255 caractères par défaut)
            $table->text('content'); // Crée une colonne 'content' de type TEXT (pour des textes plus longs)
            $table->timestamps(); // Crée les colonnes 'created_at' et 'updated_at' (TIMESTAMPS nullable)
        });
    }

    /**
     * Reverse the migrations.
     */
    public function down(): void
    {
        Schema::dropIfExists('notes');
    }
};

Expliquons les ajouts :

  • $table->id(); : Crée une colonne id qui servira de clé primaire auto-incrémentée. C'est une convention courante.
  • $table->string('title'); : Crée une colonne de type chaîne de caractères (VARCHAR) nommée title. Par défaut, la longueur est de 255 caractères, ce qui est suffisant pour un titre.
  • $table->text('content'); : Crée une colonne de type TEXT nommée content. Ce type est adapté pour stocker des chaînes de caractères plus longues, comme le corps d'une note.
  • $table->timestamps(); : Crée automatiquement deux colonnes created_at et updated_at de type TIMESTAMP. Laravel les utilisera pour enregistrer la date et l'heure de création et de dernière modification de chaque note. C'est une fonctionnalité très pratique d'Eloquent.

La méthode down() contient déjà Schema::dropIfExists('notes');, ce qui assure que si nous annulons cette migration, la table notes sera supprimée.

Exécution de la migration pour créer la table en base de données

Après avoir défini la structure de notre table dans le fichier de migration, l'étape suivante consiste à exécuter cette migration pour que Laravel crée réellement la table notes dans notre base de données. Assurez-vous d'avoir correctement configuré votre connexion à la base de données dans le fichier .env de votre projet (variables DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD).

Pour exécuter toutes les migrations en attente (dans notre cas, celle que nous venons de créer), utilisez la commande Artisan suivante :

php artisan migrate

Si tout se passe bien, vous devriez voir un message dans votre terminal indiquant que la migration a été exécutée avec succès. Par exemple :

INFO  Running migrations.
  2023_10_27_100000_create_notes_table ................................... 15ms DONE

A ce stade, la table notes avec les colonnes id, title, content, created_at, et updated_at a été créée dans votre base de données. Vous pouvez le vérifier en utilisant un client de base de données (comme phpMyAdmin, TablePlus, DBeaver, etc.) pour inspecter la structure de votre base de données. Laravel crée également une table migrations qui garde une trace des migrations qui ont déjà été exécutées, afin de ne pas les réexécuter inutilement.

Si vous rencontrez une erreur lors de l'exécution de php artisan migrate, elle est souvent liée à une mauvaise configuration de la base de données dans le fichier .env. Vérifiez attentivement ces paramètres et assurez-vous que le serveur de base de données est en cours d'exécution et accessible.