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 |
---|---|---|
User |
users |
Nom au pluriel et en minuscules. |
ProductCategory |
product_categories |
Les mots sont séparés par un underscore (_). |
Comment |
comments |
Simplement le pluriel du modèle. |
OrderProduct |
order_products |
Pluriel et séparation des mots avec un underscore. |
UserProfile |
user_profiles |
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 |
---|---|---|
Post et Tag |
post_tag |
Les noms Post et Tag sont triés alphabétiquement. |
User et Role |
role_user |
Role précède User car r vient avant u . |
Product et Order |
order_product |
Order précède Product 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 |
---|---|
php artisan make:model User -m |
Crée un modèle et une migration pour User et la table users . |
php artisan make:migration |
Crée une migration pour une table spécifique. |
php artisan migrate |
Exécute toutes les migrations et crée les tables dans la base de données. |
php artisan migrate:rollback |
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
:
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
:
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
:
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.