2017-03-02 1 views
0

Je construis un forum avec Symfony et je me demande actuellement comment je vais lister la dernière activité en utilisant Doctrine.Doctrine sort par 2 entités différentes

J'ai une relation OneToMany entre le sujet & Post.

Je devrais vérifier pour les dernières choses qui se sont produites, qui pourraient être un article sur un sujet, ou un sujet lui-même.

Comment pourriez-vous faire cela aussi propre que possible?

je ne serais probablement UNION deux sorte en quelque sorte par date et sélectionnez dernière 5.

Merci à l'avance!

+0

Que voulez-vous afficher exactement? Le résumé du forum avec la catégorie ou la liste des sujets dans une catégorie avec le dernier message? Pourquoi les 5 derniers? Je pourrais vous donner une solution après avoir répondu à ces quelques questions. Merci –

+0

Bonjour Florian! Eh bien, j'aimerais montrer une liste de sujets triés par date. (Le plus récent en premier), mais quand quelqu'un répond (Post) sur un sujet, cette date devrait être utilisée à la place pour trier. Si cela a du sens. Je dis seulement cinq parce que je suis en train de construire un widget pour la page d'accueil. Je vais en effet avoir besoin d'une liste complète sur une autre page plus tard, mais c'est juste la limite qui change je suppose. Merci! –

+0

'SELECT t.id, T.Title, MAX (p.createdOn) comme latestPost \t à partir de forum_topic comme t LEFT JOIN forum_post que p = ON p.topic_id t.id groupe par t.id commande par latestPost DESC 'serait quelque chose comme ça dans MySQL, mais voudrait une solution Doctrine :). –

Répondre

0

Vous pouvez essayer quelque chose comme ça (Il est fonction de poste de dépôt):

public function lastTopics(){ 
    // Build query 
    $qb = $this 
     ->createQueryBuilder('p') 
     ->select('p') 
     ->leftJoin('p.topic', 't') 
     ->addSelect('t') 
     ->addGroupBy('p.id') 
     ->addGroupBy('t.id') 
     ->orderBy('p.dateCreation', 'DESC') 
     ->setMaxResults(5) 
    ; 

    // Get query 
    $query = $qb->getQuery(); 

    // Return results 
    return $query->getResult(); 
} 

liste, seulement les 5 derniers messages de sujets d'observation. Enjoy;)

+0

Merci pour la suggestion! Mais cela ne retiendrait-il pas les messages au lieu des sujets? Parce que quand il y a un nouveau sujet (sans messages), il n'apparaîtra pas maintenant. Mais si le sujet a un post, je récupérerais le dernier et j'obtiendrais des informations sur qui l'a posté etc. –

+0

Le premier sujet sera affiché car il y a toujours un message (celui de l'auteur du sujet). Si vous souhaitez simplement sélectionner un sujet, supprimez addSelect ('p');) Dans l'idée d'amélioration, le stockage de la date du dernier message dans l'entité Topic optimise les requêtes. –

+0

Merci Florian, je vais ajouter la date du dernier message tout de suite car c'est encore en développement. Je vous remercie! –