Bonjour,
Je cherche une solution à mon problème :
Je suis en train de créer un forum (sujet, messages, etc) et je souhaiterais trier mes topics par date du dernier message posté sur le topic.
Par exemple :
Sur mon topic 1, le dernier message date de 15:30
Sur mon topic 2, le dernier message date de 15:32
Du coup, dans la liste que je souhaite afficher, j'aurai le topic 2, puis ensuite le topic 1
Mes topics sont reliés à leur forum par la relation suivante
public function topics(){
return $this->hasMany('App\Topic', 'forum_id');
}
Ici le code qui me retourne la collection que j'utilise pour l'affichage sur ma vue.
return $forum->topics()
->where('pinned', false)
->join('comments', 'comments.topic_id', '=', 'topics.id')
->orderBy('comments.created_at', 'desc')
->select('topics.id', 'topics.name', 'topics.slug','topics.message','topics.online','topics.pinned','topics.locked', 'topics.answerable','topics.forum_id','topics.user_id', 'comments.created_at')
->distinct('topics.id')
->paginate(20);
Grace au disctinct, j'arrive à obtenir une liste sans trop de doublons (ça ne fonctionne pas entièrement), mais le problème c'est que le join me crée plein de doublons (et fait bugger mon paginate).
Y a t il un moyen propre de trier des enregistrements d'une table en fonction de la valeur d'un champ d'un enregistrement d'une autre table, relié par une dépendance? (le tout sans doublons ?)
Merci d'avance !
Hello,
Au lieu de te prendre la tête à faire une requête pourquoi tu rajouterais pas un champ dans ta table topics genre last_date_answer qui serait une date que tu viendrais mêttre à jour quand un commentaire est ajouté/mis à jour/supprimé à l'aide d'un Observer sur ton model comment au saved ?
https://laravel.com/docs/5.6/eloquent#observers
Merci beaucoup, en effet, c'est moins casse tête, et tu m'apprends une fonctionnalité de Laravel que je ne connaissais pas :)