liens entre différentes entités de la base de données : – Par exemple, un « User » peut avoir plusieurs « Posts », un « Post » peut avoir plusieurs « Comments », etc. Eloquent ORM, le système d’ORM de Laravel, facilite grandement la gestion de ces relations.
Les principaux relations:
-
HasOne: Un modèle a une relation un-à-un avec un autre modèle. (Exemple : Un utilisateur a un seul profil.)
-
BelongsTo: L’inverse de HasOne. Un modèle appartient à un seul modèle parent. (Exemple : Un commentaire appartient à un seul post.)
-
HasMany: Un modèle a une relation un-à-plusieurs avec un autre modèle. (Exemple : Un utilisateur a plusieurs posts.)
-
BelongsToMany: Une relation plusieurs-à-plusieurs, nécessitant une table de pivot. (Exemple : Un utilisateur peut aimer plusieurs posts, et un post peut être aimé par plusieurs utilisateurs.)
-
MorphTo: Une relation polymorphique, permettant à un modèle d’être lié à plusieurs types de modèles. (Exemple : Un commentaire peut être lié à un post, un utilisateur, etc.)
-
MorphOne et MorphMany: Les équivalents de HasOne et HasMany pour les relations polymorphiques.
Laravel utilise Eloquent ORM pour gérer les relations entre les entités de la base de données. Voici une explication des relations principales avec des exemples de code.
1. Relation HasOne : Relation Un-à-Un
Un modèle est lié à un autre modèle par une relation un-à-un.
Exemple : Un utilisateur a un seul profil
Fichier | Code |
---|---|
Modèle User |
php<br>public function profile()<br>{<br> return $this->hasOne(Profile::class);<br>}<br> |
Modèle Profile |
php<br>protected $fillable = ['user_id', 'bio', 'website'];<br> |
Migration | php<br>$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');<br> |
Utilisation | php<br>$user = User::find(1);<br>$profile = $user->profile;<br> |
2. Relation BelongsTo : Relation Inverse Un-à-Un
Un modèle appartient à un autre modèle.
Exemple : Un commentaire appartient à un post
Fichier | Code |
---|---|
Modèle Comment |
php<br>public function post()<br>{<br> return $this->belongsTo(Post::class);<br>}<br> |
Modèle Post |
php<br>protected $fillable = ['title', 'content'];<br> |
Utilisation | php<br>$comment = Comment::find(1);<br>$post = $comment->post;<br> |
3. Relation HasMany : Relation Un-à-Plusieurs
Un modèle est lié à plusieurs autres modèles.
Exemple : Un utilisateur peut avoir plusieurs posts
Fichier | Code |
---|---|
Modèle User |
php<br>public function posts()<br>{<br> return $this->hasMany(Post::class);<br>}<br> |
Utilisation | php<br>$user = User::find(1);<br>$posts = $user->posts;<br> |
4. Relation BelongsToMany : Relation Plusieurs-à-Plusieurs
Deux modèles sont liés par une relation plusieurs-à-plusieurs avec une table de pivot.
Exemple : Un utilisateur peut aimer plusieurs posts, et un post peut être aimé par plusieurs utilisateurs
Fichier | Code |
---|---|
Migration Pivot | php<br>$table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');<br>$table->foreign('post_id')->references('id')->on('posts')->onDelete('cascade');<br> |
Modèle User |
php<br>public function likedPosts()<br>{<br> return $this->belongsToMany(Post::class, 'post_user');<br>}<br> |
Modèle Post |
php<br>public function likers()<br>{<br> return $this->belongsToMany(User::class, 'post_user');<br>}<br> |
Utilisation | php<br>$user = User::find(1);<br>$likedPosts = $user->likedPosts;<br> |
5. Relation Polymorphique : MorphTo
Un modèle peut être lié à plusieurs types de modèles différents.
Exemple : Un commentaire peut être lié à un post ou à une vidéo
Fichier | Code |
---|---|
Migration comments |
php<br>$table->unsignedBigInteger('commentable_id');<br>$table->string('commentable_type');<br> |
Modèle Comment |
php<br>public function commentable()<br>{<br> return $this->morphTo();<br>}<br> |
Modèle Post |
php<br>public function comments()<br>{<br> return $this->morphMany(Comment::class, 'commentable');<br>}<br> |
Modèle Video |
php<br>public function comments()<br>{<br> return $this->morphMany(Comment::class, 'commentable');<br>}<br> |
Utilisation | php<br>$post = Post::find(1);<br>$comments = $post->comments;<br> |
6. MorphOne et MorphMany : Relations Polymorphiques Étendues
Exemple : Un utilisateur a une seule image de profil
Fichier | Code |
---|---|
Modèle User |
php<br>public function image()<br>{<br> return $this->morphOne(Image::class, 'imageable');<br>}<br> |
Modèle Image |
php<br>public function imageable()<br>{<br> return $this->morphTo();<br>}<br> |
Résumé
Laravel Eloquent facilite la gestion des relations entre entités grâce à des méthodes intuitives. Avec cette structure sous forme de tableaux, il est plus facile de visualiser et de comprendre l’implémentation des relations dans une application Laravel.