2016-04-19 3 views
0

Angenommene Ive bekam den folgenden DB-SetupLaravel 5> orderBy Unterschied zwischen oben und unten Stimmen> Paginierung

Benutzer Tabelle

id 
name 

Beiträge Tabelle

id 
post 

Stimmen Tabelle

id 
user_id 
post_id 
vote (1 = up, -1 = down) 

... und lass uns annehmen, auch Ive Setup jeder eine Eins-zu-viele-Beziehung richtig :)

Wie ich durch die Differenz abfragen Sie die Top-5 Beiträge zwischen Es ist gemessen rauf und runter stimmen?

So etwas wäre toll ...

$posts = Post::whereHas('votes', function($query) { 
    $query->orderByRaw('sum(\'vote\'), desc'); 
})->get(); 

... und I `d wie später Paginieren.

Antwort

0

arbeiten jetzt :)

$posts = Post::has('votes') 
    ->leftJoin('votes', 'votes.post_id', '=', 'posts.id') 
    ->selectRaw('posts.*, sum(votes.vote) as votes_sum') 
    ->groupBy('posts.id') 
    ->orderBy('votes_sum', 'desc') 
    ->paginate(5); 
Verwandte Themen