Le nommage des tables dans Laravel suit des conventions spécifiques qui assurent la cohérence et la clarté des relations dans la base de données. Voici une explication complète avec des exemples et des détails sur les tables de pivot.
1. Conventions de Nommage des Tables
Règles Générales :
-
Le nom de la table est le pluriel du nom du modèle correspondant.
-
Les noms des tables sont en minuscules.
-
Les mots sont séparés par des underscores (_) si le modèle contient plusieurs mots.
Exemples :
Modèle | Nom de la Table | Explication |
---|---|---|
|
|
Nom au pluriel et en minuscules. |
|
|
Les mots sont séparés par un underscore (_). |
|
|
Simplement le pluriel du modèle. |
|
|
Pluriel et séparation des mots avec un underscore. |
|
|
Suit la règle de pluralisation et d’underscore. |
2. Tables de Pivot
Dans une relation Many-to-Many, Laravel utilise une table de pivot pour relier les deux modèles. La convention de nommage est :
- Combinez les noms des deux modèles.
- Triez-les alphabétiquement.
- Séparez-les par un underscore (_).
Exemples :
Relation Many-to-Many | Nom de la Table de Pivot | Explication |
---|---|---|
et
|
|
Les noms
et
sont triés alphabétiquement. |
et
|
|
précède
car
vient avant
. |
et
|
|
précède
dans l’ordre alphabétique. |
Migration pour une Table de Pivot :
Prenons l’exemple d’une relation entre Post et Tag.
Commande Artisan :
bash
php artisan make:migration create_post_tag_table --create=post_tag
Migration :
php
use Illuminate\Database\Migrations\Migration; use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\Schema; class CreatePostTagTable extends Migration { public function up() { Schema::create('post_tag', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('post_id'); $table->unsignedBigInteger('tag_id'); $table->timestamps(); // Clés étrangères $table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade'); $table->foreign('tag_id')->references('id')->on('tags')->onDelete('cascade'); }); } public function down() { Schema::dropIfExists('post_tag'); } }
3. Personnalisation des Noms de Tables
Par défaut, Laravel utilise la convention décrite ci-dessus, mais vous pouvez personnaliser le nom des tables si nécessaire.
Exemple :
Pour un modèle UserProfile, vous voulez que la table s’appelle
profiles
au lieu de
user_profiles
.
Modèle :
php
namespace App\Models; use Illuminate\Database\Eloquent\Model; class UserProfile extends Model { protected $table = 'profiles'; // Spécification du nom personnalisé }
4. Utilisation dans les Relations
Laravel utilise les noms des tables pour résoudre les relations définies dans les modèles. Voici comment ces conventions s’intègrent dans les relations.
Relation HasMany :
Un utilisateur peut avoir plusieurs commentaires.
Modèle
User
:
php
public function comments() { return $this->hasMany(Comment::class); }
Relation BelongsToMany (Many-to-Many) :
Un post peut avoir plusieurs tags, et un tag peut appartenir à plusieurs posts.
Modèle
Post
:
php
public function tags() { return $this->belongsToMany(Tag::class); }
Modèle
Tag
:
php
public function posts() { return $this->belongsToMany(Post::class); }
Laravel utilisera automatiquement la table
post_tag
pour cette relation.
5. Commandes Artisan pour Gérer les Tables
Commande | Description |
---|---|
|
Crée un modèle et une migration pour
et la table
. |
|
Crée une migration pour une table spécifique. |
|
Exécute toutes les migrations et crée les tables dans la base de données. |
|
Annule la dernière migration exécutée. |
Exemple Complet avec Migration, Modèles et Relations
Prenons un exemple d’une relation Many-to-Many entre
User
et
Role
.
1. Modèle
User
:
User
php
namespace App\Models; use Illuminate\Database\Eloquent\Model; class User extends Model { public function roles() { return $this->belongsToMany(Role::class); } }
2. Modèle
Role
:
Role
php
namespace App\Models; use Illuminate\Database\Eloquent\Model; class Role extends Model { public function users() { return $this->belongsToMany(User::class); } }
3. Migration pour la Table de Pivot
role_user
:
role_user
php
Schema::create('role_user', function (Blueprint $table) { $table->id(); $table->unsignedBigInteger('role_id'); $table->unsignedBigInteger('user_id'); $table->timestamps(); $table->foreign('role_id')->references('id')->on('roles')->onDelete('cascade'); $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade'); });
Laravel suit des conventions de nommage spécifiques pour simplifier et standardiser la gestion des bases de données. Ces conventions, combinées aux outils d’Eloquent ORM, offrent une approche intuitive pour gérer les relations entre les entités. En cas de besoins spécifiques, Laravel permet aussi de personnaliser les noms de tables ou de relations.