Ceci est une ancienne révision du document !
Pour que tout se passe bien, nommé vos tables au pluriel, vos modèles au singulier, votre id doit s’appeler id…
Bref, voici un schéma
Pour stocker des articles
Table: articles Champ: id, user_id, titre, contenu...
Commentaires des articles
Table: Commentaires Champ: id, article_id, user_id, contenu...
Un article peut contenir plusieurs commentaires, nous allons définir la relation un-vers-plusieurs et regarder comment récupérer les données qu’il nous faut.
<?php /** * Article */ class Article extends Eloquent{ // Nom de la class au singulier // Automatiquement la table articles sera lié public function commentaires(){ return $this->hasMany('Commentaire'); // le champ article_id sera utilisé par défaut // sinon spécifié le champ de la table commentaire qui fait le lien // ...hasMany('Commentaire','id_articles') } }
<?php /** * Commentaire */ class Commentaire extends Eloquent{ // Nom de la class au singulier // Automatiquement la table commentaires sera lié public function article(){ return $this->belongsTo('Article'); // le champ article_id sera utilisé par défaut // sinon spécifié le champ de la table commentaire qui fait le lien // ...belongsTo('Commentaire','id_articles') } }
Maintenant nous voulons afficher les 10 derniers commentaires en spécifiant le titre de l’article.
// On récupère les 10 derniers éléments les plus récents de la table commentaires $lastCommentaires = Commentaire::orderBy('created_at','desc')->take(10)->get(); // On boucle sur les enregistrements foreach ($lastCommentaires as $c) { echo 'Commentaire du '.$c->created_at." pour l'article ".$c->article()->first()->titre.'<br>'; // ou en écriture simplifié echo 'Commentaire du '.$c->created_at." pour l'article ".$c->article->titre.'<br>'; }