2016-03-25 3 views
3

Ich habe eine Tabelle stats wie folgt aus:Eloquent: Reihenfolge von max Differenz?

id | post_id | num_yes | num_no 
1 | 1  | 2  | 0 
2 | 1  | 3  | 3 
3 | 1  | 1  | 0 

Wie kann ich durch die Differenz bestellen num_yes - num_no? Die Ausgabe sollte 1, 3, 2 (in Bezug auf id) aussehen.

Ich habe dies zur Zeit:

$posts = Post::join('stats', 'stats.id', '=', 'posts.id') 
    ->where('post_id', 1) 
    ->orderByRaw('MAX(stats.num_yes - stats.num_no)', 'DESC') 
    ->get(); 

Aber das funktioniert nicht. Wie kann ich das beheben?

Antwort

0

Sie bestellen per MAX(stats.num_yes - stats.num_no), was Ihnen den maximalen Wert der Unterschiede zwischen diesen Spalten (über alle Zeilen) gibt. Sie möchten wirklich nur nach dem Unterschied zwischen diesen Spalten für je Zeile:

$posts = Post::join('stats', 'stats.id', '=', 'posts.id') 
    ->where('post_id', 1) 
    ->orderByRaw('(stats.num_yes - stats.num_no)', 'DESC') 
    ->get(); 
bestellen