2016-04-24 3 views
0

Hier möchte ich meine Top-Beiträge der Woche oder des Monats nach den Kommentaren der einzelnen Post.Die Abfrage funktioniert, aber ich bin nicht in der Lage zu paginieren.Bitte helfen!So paginieren Sie die Eloquenz-Abfrage mit orderBy. on join

$top = Post::having('created_at', '>=', $time) 
     ->selectRaw('posts.*, count(*) as `aggregate`') 
     ->join('post_comments', 'posts.id', '=', 'post_comments.post_id') 
     ->groupBy('post_id') 
     ->orderBy('aggregate', 'desc') 
     ->with('post_comments_count') 
     ->get(); 
+0

kann jemand bitte helfen, das ist 12:15 Uhr hier. Warten auf Antwort. –

Antwort

0

Sie möchten die paginator manuell machen, während groupBy, wie in Laravel docs beschrieben!.

Hinweis: Derzeit, Paginieren Operationen, die eine groupBy Anweisung verwenden, können nicht effizient durch Laravel ausgeführt werden. Wenn Sie eine GroupBy mit einer paginierten Ergebnismenge verwenden müssen, sollten Sie die Datenbank abfragen und manuell einen Paginator erstellen.

0

Haben Sie den Befehl -> paginate() von Laravel ausprobiert?

$top = Post::having('created_at', '>=', $time) 
    ->selectRaw('posts.*, count(*) as `aggregate`') 
    ->join('post_comments', 'posts.id', '=', 'post_comments.post_id') 
    ->groupBy('post_id') 
    ->orderBy('aggregate', 'desc') 
    ->with('post_comments_count') 
    ->paginate(10); 

sollte gut funktionieren. In Blade-Datei können Sie die Paginierung rufen mit

{!! $top->links() !!} 

Quelle: Laravel Pagination

+0

ja ich habe und hier ist Fehlermeldung, die ich bekomme: '(SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'created_at' in 'having clause' (SQL: wählen Sie count (*) als Aggregat von' posts' inner beitreten 'post_comments' auf' posts'.id' = 'post_comments'.post_id' wo' posts'.deleted_at' null ist und 'bestätigt' = 0 Gruppe mit' post_id' mit 'created_at'> = 2016-04 -04)) ' –

+0

Haben Ihre Table 'Posts' das Attribut ** created_at **? – Devsome

+0

ja, aber es sagt Spalte nicht gefunden, nur wenn ich für paginate versuchen –