2015-04-15 12 views
6

Kiedy chcę zdefiniować niestandardową kolejność sortowania w zapytaniu MySQL można zrobić coś takiego:MySQL zamówienie przez pola w elokwentny

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

Jaki byłby wersja Eloquent ORM z tego?

UPDATE:

Jest to rozwiązanie i działa również przy zamawianiu na różnych polach:

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

prawda spróbuj '$ query-> orderBy (" FIELD (język, "USD", "EUR", "JPN") "," asc ");'? – Alex

+0

Tak, ale powoduje to błąd "nieznanego pola". – wout

Odpowiedz

12

Korzystanie albo DB::raw() lub orderByRaw bezpośrednio powinno działać:

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

Oprócz zapytania o zamówienie surowe zamawiam również w innych polach. Teraz otrzymuję ten błąd: '' 'SQLSTATE [42000]: Błąd składniowy lub naruszenie dostępu: 1064 Wystąpił błąd w składni SQL; sprawdź instrukcję, która odpowiada twojej wersji serwera MySQL dla właściwej składni do użycia w pobliżu 'asc' w linii 1 (SQL: wybierz * z 'events' gdzie' events''deleted_at' ma wartość null i 'status' = 'good' porządek według 'event_type_id' asc, FIELD (status, 'good', 'bad', 'hidden', 'active', 'canceled',' date' asc) '' ' – wout

+0

Wygląda na to, że wstawiłeś' asc' wewnątrz nawiasu – lukasgeiter

+0

Zaktualizowałem początkowe pytanie, aby dołączyć Eloquent składnię: – wout

Powiązane problemy