2017-08-02 5 views
0

Ich versuche, alle Datensätze im modalen Roleplay Reihenfolge von der payslips_collected ASC (aufsteigend) zu bekommen.Laravel: OrderBy funktioniert nicht?

Aufsteigend soll mit dem niedrigsten Wert beginnen und nach oben gehen. Ich verstehe das nicht ... hier ist mein Ergebnis eines Tisches, den ich gemacht habe.

+----+------------------+--------+-------------+-----------------+-----------------+--------------+-----------+ 
| ID | Username  | Shifts | Completed | Registered  | Website Login | Client Login | Last Seen | 
+----+------------------+--------+-------------+-----------------+-----------------+--------------+-----------+ 
| 1 | Danny Fure  | 29 | 1 year ago | 43 minutes ago | 43 minutes ago | 1 second ago |   | 
| 2 | James Mack  | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 3 | Peter Barlow | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 4 | Adam Chapman | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 5 | Danny Burrows | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 6 | Kieran Root  | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 8 | Ashton David | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 9 | Someone Special | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 10 | Kelly Clark  | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
| 11 | Abbie Grove  | 0 | 1 year ago | 1 second ago | 2 days ago  | 1 second ago |   | 
+----+------------------+--------+-------------+-----------------+-----------------+--------------+-----------+ 

Es tut mir leid, es ist ein bisschen durcheinander, es wurde nicht korrekt formatiert. Aber das Hauptproblem ist, dass es in DESC Ordnung zeigt, (absteigend) zeigt die höchste vor der niedrigsten.

Kann mir jemand sagen, warum es das macht?

Raw Abfrage:

select * from `users` where exists (select * from `srp_user_statistics` where `users`.`id` = `srp_user_statistics`.`user_id` order by `payslips_collected` asc) 

Code:

$players = Player::whereHas('roleplay', function ($query) use($orderType) { 
    $query->orderBy('payslips_collected', $orderType); 
}); 
+0

In Laravel ist es eigentlich egal, aber es war sowieso klein. – distributi0n

+0

Zeigen Sie uns einfach Ihre Tabelle. Wie hier geht es nicht um 'payslips_collected' –

+0

Bibhudatta, payslips_collected gehört zur' srp_user_statistics' Tabelle, die in der rohen Abfrage deutlich zu sehen ist. Ich glaube nicht, dass du mehr brauchst. – distributi0n

Antwort

0

Versuchen Sie, diese

$players = Player::has('roleplay') 
    ->orderBy('payslips_collected', $orderType) 
    // ... 
+0

Ich rufe -> get() später in der Funktion auf. Es gibt keine Notwendigkeit dafür, und selbst wenn ich vergessen hätte zu rufen -> get() würde ich einen Fehler bekommen, nicht diese Art von Problem. – distributi0n

+0

@ distributi0n Das Problem mit Ihrem Code ist, dass Ihre 'order by' -Klausel innerhalb der' subquery' liegt, die ignoriert wird, also müssen Sie sie außerhalb nennen. –

+0

Ich kann es nicht außerhalb dieser Abfrage aufrufen, da payslips_collected nicht zur Player modals-Tabelle gehört, sondern zur roleplay modals-Tabelle. Ich erhalte eine Fehlermeldung, dass die Spalte beim Versuch nicht existiert. – distributi0n

1

Ich glaube, Sie sind so bekommen, wie Sie Auftrag von für die verwenden Unterabfrage nicht für die Hauptauswahlabfrage so versuchen, um durch aus der Seite zu schreiben, um Sie Unterabfrage
Gefällt Ihnen dieses

$players = Player::whereHas('roleplay', function ($query) use($orderType) { 
    $query->orderBy('payslips_collected', $orderType); 
})->orderBy('id', $orderType); 

Edit: -

select `users`.* from `users` join `srp_user_statistics` on `users`.`id` = `srp_user_statistics`.`user_id` 
order by `srp_user_statistics.payslips_collected` asc 
+0

Ich bekomme diesen Fehler, wenn ich das versuche? SQLSTATE [42S22]: Spalte nicht gefunden: 1054 Unbekannte Spalte 'payslips_collected' in 'Auftragsklausel' (SQL: wähle * aus 'users' wo existiert (wähle * aus' srp_user_statistics' wo 'users'.id' =' srp_user_statistics' ist) .'user_id' Reihenfolge nach 'payslips_collected' desc) Reihenfolge nach' payslips_collected' desc limit 10) – distributi0n

+0

''payslips_collected'' ist Spalte ist nicht in Ihrer Benutzertabelle, daher kam dieser Fehler, geben Sie den Spaltennamen aus Ihrer Benutzertabelle, dann werden Sie der Wert –

+0

Das ist nicht das, was ich tun möchte .. Ich möchte die Spalte payslips_collected aus der Tabelle Roleplay .. nicht die Benutzer-Tabelle. – distributi0n

0

Sie die Ergebnisse Sammlung sortieren:

$sorted_players = $players->sortByDesc('payslips_collected'); 

Oder kehren Sie einfach Ihre tatsächlichen Ergebnisse

$sorted_players = $players->reverse();