Qu’est-ce qu’une relation
Les tables d’une base de données sont souvent liées entre elles. Un article de blog a plusieurs commentaires ; une commande est reliée à l’utilisateur qui l’a passée. Eloquent facilite la définition et la manipulation de ces relations. Elles se déclarent comme des méthodes sur les modèles Eloquent.Cette page prend
User, Post, Comment, Tag comme exemples concrets.
Ces modèles et leurs tables sont supposés déjà créés.hasOne (1-1)
hasOne : le modèle possède un seul autre modèle. Par exemple, User a un Profile.
Définir la relation
Ajoutezprofile au modèle User.
user_id dans la table profiles.
Récupérer la relation
Accédez à la relation comme une propriété.belongsTo (inverse de 1-1)
belongsTo est l’inverse : à définir sur le modèle qui contient la clé étrangère. Profile appartient à User.
Définir la relation
_id comme clé étrangère (user_id).
Récupérer la relation
hasMany (1-N)
hasMany est la relation la plus courante : un parent, plusieurs enfants. Par exemple, un Post a plusieurs Comment.
Définir la relation
post_id sur comments.
Récupérer la relation
hasMany retourne une Collection.
Relation inverse (belongsTo)
Pour remonter d’un commentaire au post, définissezbelongsTo dans Comment.
belongsToMany (N-N)
Une relation N-N s’utilise quand chaque côté peut avoir plusieurs relations. Par exemple,Post a plusieurs Tag et Tag appartient à plusieurs Post.
Structure des tables
Une table pivot est nécessaire. PourPost et Tag, créez post_tag.
Eloquent déduit le nom de la table pivot en combinant les deux noms de modèles par ordre alphabétique (
post + tag → post_tag).Définir la relation
Tag.
Récupérer la relation
Ajouter / retirer
attach ajoute des enregistrements dans la pivot ; detach en retire.
Eager loading
Problème N+1
Accéder à une relation comme propriété déclenche une requête à chaque fois : c’est du « lazy loading ». Dans une boucle, cela provoque le problème N+1.Eager loading avec with()
with() charge la relation en masse : seulement 2 requêtes au total.
Charger plusieurs relations
Passez un tableau àwith().
Eager loading imbriqué
La notation point permet d’aller plus loin.Prochaines étapes
Introduction à Eloquent
Revenez sur les opérations CRUD de base d’Eloquent.