Bases : Liens entre Différentes Entités dans une BdD avec Laravel

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>&nbsp;&nbsp;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>&nbsp;&nbsp;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>&nbsp;&nbsp;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>&nbsp;&nbsp;return $this->belongsToMany(Post::class, 'post_user');<br>}<br>
Modèle

Post

php<br>public function likers()<br>{<br>&nbsp;&nbsp;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>&nbsp;&nbsp;return $this->morphTo();<br>}<br>
Modèle

Post

php<br>public function comments()<br>{<br>&nbsp;&nbsp;return $this->morphMany(Comment::class, 'commentable');<br>}<br>
Modèle

Video

php<br>public function comments()<br>{<br>&nbsp;&nbsp;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>&nbsp;&nbsp;return $this->morphOne(Image::class, 'imageable');<br>}<br>
Modèle

Image

php<br>public function imageable()<br>{<br>&nbsp;&nbsp;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.