2017-08-12 3 views
0

Ich versuche, eine Moderationsberichte Warteschlange wie reddit aufzubauen. In der Warteschlange möchte ich Beiträge und Kommentare zusammen zeigen haben, aber alles, was ich bekommen kann, ist eine, oder das andere mit zwei Anfragen:Gruppieren der Ergebnisse von zwei Abfragen in eloquenten ORM

//Get all posts with reports 
Post::whereHas('reports')->with('reports.user')->latest()->get(); 
// Get all comments with reports 
Comment::whereHas('reports')->with('reports.user')->latest()->get(); 

Es gibt eine polymorphe Beziehung mit den Kommentaren, Beiträge und Berichte.

Tisch

Hier ist die Ausgabe für Beiträge:

{ 
"id": 7, 
"author_id": 1, 
"title": "A forum post!", 
"body": "<p>Some Forum post content</p>", 
"created_at": "2017-08-08 23:03:22", 
"updated_at": "2017-08-08 23:03:22", 
"reports": [ 
    { 
     "id": 5, 
     "user_id": 1, 
     "content": "Rule 1", 
     "reportable_id": 7, 
     "reportable_type": "App\\Post", 
     "created_at": "2017-08-11 19:32:02", 
     "updated_at": "2017-08-11 19:32:02", 
     "user": { 
     "id": 1, 
     "role_id": 1, 
     "name": "Admin", 
     "created_at": "2017-08-01 18:37:18", 
     "updated_at": "2017-08-10 18:59:52" 
     } 
     } 
    ] 
}, 

Wie würde ich die beiden Beiträge und Kommentare abfragen?

Bearbeiten Ich möchte nicht gerne die Kommentare mit den Posts laden. Ich möchte die beiden Abfragen, die ich oben aufgelistet habe, zusammenfügen. Ich fühle nach dem Lesen, dass ich ein union zwischen den zwei Abfragen erstellen muss, weil ich glaube nicht, dass ich sie zusammenfügen könnte. Ich bin mir nicht sicher, wie ich das machen soll.

+0

dieser Weg versucht 'post-> comment-> Berichte-> user'? Ich meine nicht, dass das ein Code ist, aber diesem Pfad folgend? ist Post und Kommentare verwandt? –

+0

Sie können mehrere Beziehungen gleichzeitig laden, versuchen Sie 'Post :: whereHas ('reports') -> mit ('reports.user', 'comment') -> latest() -> get();' –

+0

Das würde Holen Sie sich die Kommentare, die für einen Beitrag existieren und nicht die Kommentare, die nur Berichte haben, nicht wahr? Ich möchte im Wesentlichen diese beiden Abfragen gruppiert und dann organisiert von spätestens: 'Post :: whereHas ('Berichte') -> mit ('reports.user')' 'Kommentar :: WhereHas ('Berichte') - > with ('reports.user') ' Der Top-Kommentar würde alle Kommentare erhalten, die einem Post und nicht einem Kommentar zugeordnet sind. Ich denke. – user3325126

Antwort

0

Anstatt mit Posts oder Kommentaren als Ausgangspunkt anzufangen, warum nicht mit dem Berichtsmodell beginnen? Sie haben gesagt, dass Sie eine "Moderationsberichte-Warteschlange" erstellen, die angibt, dass die Abfrage der Berichtstabelle (und das Verknüpfen von Kommentaren/Posts) eine natürlichere Lösung sein könnte.

Reports::latest()->with('reportable', 'user')->get() 

Eager Laden wurde zu Laravel in PR hinzugefügt https://github.com/laravel/framework/pull/13737

+0

Ich hatte gehofft, eine Posts/Kommentare nur einmal in der Warteschlange mit einer Liste aufgeführt, wie oft sie unter ihnen gemeldet wurden. Würde das nicht jedes Mal, wenn es gemeldet wurde, einen Post/Kommentar in der Warteschlange aufführen? – user3325126

+0

Möchten Sie sie in der Reihenfolge des letzten Berichts oder des letzten Posts/Kommentars auflisten? Wenn Sie kürzlich Berichte erstellt haben, können Sie die Berichtstabelle und die Gruppe per Post/Kommentar abfragen, um die Anzahl der Berichte für jede zu ermitteln. – redmallard

+0

Letzter Kommentar/Beitrag. Vielen Dank für Ihre Hilfe. – user3325126

Verwandte Themen