Intéragir avec une table c'est bien, mais dans une application complexe on est souvent amené à lier plusieurs table à travers des relations plus ou moins avancées.
Relation 1..n
On va commencer par la relation la plus courante, la relation belongsTo / hasMany. Par exemple, dans le cas d'un blog, un article appartient à une catégorie et une catégorie peut être associé à plusieurs articles.
Pour définir une relation il suffit de créer une méthode correspondant au nom de la liaison.
Pour associer les catégories aux articles il faudra utiliser la méthode hasMany()
Une fois cette relation établie il est alors possible de récupérer les informations simplement depuis un model.
Récupérer l'association peut s'avérer utile, surtout dans le cas d'une relation hasMany() afin d'effectuer des conditions supplémentaires.
Le problème n+1 requêtes
La logique Active Record permet une approche objet des relations mais peut s'avérer très gourmande pour la base de donnée. En effet, par défaut chaque accès à $post->categoryva générer une requête supplémentaire. Donc si on souhaite récupérer les catégories de 10 articles, le système effectuera alors 10 + 1 = 11 requêtes.
Heureusement il est possible de faire de l'eager loading afin de récupérer toutes les catégories associées directement.