2015-04-15 7 views
6

Wenn ich eine benutzerdefinierte Sortierreihenfolge in einer MySQL-Abfrage definieren möchte, kann ich etwas tun:MySQL, um von Feld in Eloquent

ORDER BY FIELD(language,'USD','EUR','JPN') 

Was die Eloquent ORM Version davon sein würde?

UPDATE:

Dies ist die Lösung und es funktioniert auch, wenn sie auf verschiedenen Gebieten der Bestellung:

$events = Event::with('type', 'location') 
       ->orderBy('event_type_id') 
       ->orderByRaw("FIELD(status, 'good', 'bad', 'hidden', 'active', 'cancelled')") 
       ->orderBy('date'); 
+1

haben Sie probiere '$ query-> orderBy (" FIELD (Sprache, 'USD', 'EUR', 'JPN') ", 'asc');'? – Alex

+0

Ja, aber das führt zu einem Fehler "unbekanntes Feld". – wout

Antwort

12

Verwendung entweder DB::raw() oder orderByRaw direkt funktionieren sollte:

$models = Model::orderByRaw('FIELD(language, "USD", "EUR", "JPN")')->get(); 
// or 
$models = Model::orderBy(DB::raw('FIELD(language, "USD", "EUR", "JPN")'))->get(); 
+0

Neben der rohen Auftragsabfrage bestelle ich auch auf anderen Feldern. So bekomme ich jetzt diesen Fehler: '' 'SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1064 Sie haben einen Fehler in Ihrer SQL-Syntax; Überprüfen Sie das Handbuch, das Ihrer MySQL-Serverversion entspricht, für die richtige Syntax in der Nähe von 'asc' in Zeile 1 (SQL: Wählen Sie * aus 'events' aus, wobei' events'.deleted_at' null ist und 'status' = 'gut' Sortieren nach 'event_type_id' asc, FIELD (Status, 'gut', 'schlecht', 'versteckt', 'aktiv', 'annulliert', 'Datum' asc)' '' – wout

+0

Sieht so aus, als würden Sie 'asc' in die Klammer setzen – lukasgeiter

+0

Ich habe die ursprüngliche Frage aktualisiert, um die eloquente Syntax einzuschließen: – wout