2015-04-15 22 views
6

Khi tôi muốn xác định một thứ tự sắp xếp tùy chỉnh trong một truy vấn MySQL tôi có thể làm một cái gì đó như thế này:MySQL trật tự của trường trong hùng biện

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

Điều gì sẽ là phiên bản hùng biện ORM về điều đó?

UPDATE:

Đây là giải pháp và nó cũng hoạt động khi đặt hàng trên nhiều lĩnh vực:

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

đã làm bạn thử '$ query-> orderBy (" FIELD (ngôn ngữ, 'USD', 'EUR', 'JPN') ", 'asc');'? – Alex

+0

Có, nhưng điều đó dẫn đến lỗi "trường không xác định". – wout

Trả lời

12

Sử dụng một trong hai DB::raw() hoặc orderByRaw trực tiếp nên làm việc:

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

Ngoài truy vấn nguyên đơn, tôi cũng đang đặt hàng trên các trường khác. Vì vậy, tôi nhận được lỗi này ngay bây giờ: '' 'SQLSTATE [42000]: Lỗi cú pháp hoặc truy cập vi phạm: 1064 Bạn có một lỗi trong cú pháp SQL của bạn; kiểm tra hướng dẫn tương ứng với phiên bản máy chủ MySQL của bạn cho cú pháp đúng để sử dụng gần 'asc' ở dòng 1 (SQL: select * from 'events' trong đó' events'.'deleted_at' là null và 'status' = 'good' thứ tự bởi 'event_type_id' asc, FIELD (trạng thái, 'tốt', 'xấu', 'ẩn', 'hoạt động', 'bị hủy',' ngày' asc) '' ' – wout

+0

Có vẻ như bạn đặt' asc' bên trong dấu ngoặc đơn – lukasgeiter

+0

Tôi đã cập nhật câu hỏi ban đầu để bao gồm cú pháp Eloquent – wout

Các vấn đề liên quan