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.

Bases : Construire un projet Laravel

La création d’un projet Laravel efficace nécessite une approche bien structurée pour organiser les données et gérer les fonctionnalités. Voici un...

Tuto : Laravel Ecommerce

Laravel 11 et Voyager forment un duo puissant pour développer rapidement des applications e-commerce robustes et personnalisables. Pourquoi : -...

Bases : Construire un projet Laravel

La création d’un projet Laravel efficace nécessite une approche bien structurée pour organiser les données et gérer les fonctionnalités. Voici un...

Tuto : Laravel Ecommerce

Laravel 11 et Voyager forment un duo puissant pour développer rapidement des applications e-commerce robustes et personnalisables. Pourquoi : -...