2017-03-02 5 views
0

Ich baue ein Forum mit Symfony und ich frage mich gerade, wie ich die neueste Aktivität mit Doctrine auflisten soll.Doktrin sortiere nach 2 verschiedenen Entitäten

Ich habe eine OneToMany Beziehung zwischen Thema & Post.

Ich würde für die neuesten Dinge überprüfen geschehen, die ein Beitrag zu einem Thema sein könnten, oder ein Thema selbst.

Wie würdest ihr das so sauber wie möglich machen?

Ich würde wahrscheinlich UNION nach Datum irgendwie sortieren beide ein und wählen Sie zuletzt 5.

Vielen Dank im Voraus!

+0

Was möchten Sie genau anzeigen? Das Forum Zusammenfassung mit der Kategorie oder Liste von Themen in einer Kategorie mit dem letzten Beitrag? Warum die letzten 5? Ich könnte Ihnen eine Lösung geben, nachdem Sie diese wenigen Fragen beantwortet haben. Danke –

+0

Hallo Florian! Nun, ich möchte eine Liste der Themen nach Datum sortiert anzeigen. (Neuestes zuerst), aber wenn jemand (Post) auf ein Thema antwortet, sollte dieses Datum stattdessen zum Sortieren verwendet werden. Wenn das irgendeinen Sinn ergibt. Ich sage nur fünf, weil ich gerade ein Widget für die Startseite erstelle. Ich werde später tatsächlich eine vollständige Liste auf einer anderen Seite brauchen, aber das ist nur das LIMIT, das sich ändert, denke ich. Vielen Dank! –

+0

SELECT t.id, t.title, MAX (p.createdOn) als latestPost \t FROM forum_topic als t LEFT JOIN forum_post wie p ON p.topic_id t.id = Gruppe von t.id Sortieren nach latestPost DESC 'wäre so etwas in MySQL, würde aber gerne eine Doctrine-Lösung :). –

Antwort

0

Sie können so etwas wie dies versuchen (es ist eine Funktion von Repository Post):

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(); 
} 

Dann Liste nur die letzten 5 Beiträge sehen Themen. Viel Spaß;)

+0

Danke für den Vorschlag! Aber würde das nicht die Posts anstatt der Themen retrieven? Denn wenn es ein neues Thema gibt (ohne Beiträge), wird es jetzt nicht angezeigt. Aber wenn das Thema einen Beitrag hat, würde ich den letzten abrufen und Informationen darüber erhalten, wer es gepostet hat usw. –

+0

Das erste Thema wird angezeigt, da immer eine Nachricht (die des Autors des Themas) vorhanden ist. Wenn Sie nur Thema wollen wählen, entfernen addSelect (‚p‘);) In der Idee der Verbesserung, das Datum der letzten Nachricht in der Topic Entität Speichern der Abfragen optimiert. –

+0

Danke Florian, ich werde das Datum der letzten Nachricht sofort hinzufügen, da diese noch in der Entwicklung ist. Vielen Dank! –

Verwandte Themen