There are some situations which require developers to sort database results by specific values or calculated values. orderByRaw() method will useful.
Both Query Builder and Eloquent in Laravel support this method to allow querying using a MySQL raw statement.
For example, our database has sales table which contains state field. This field only has 4 values: DRAFT, SENT, DONE, CANCEL. We want to list sales following this order, SENT, DRAFT, DONE, CANCEL.
Table of Contents
Query Builder
$sales = DB::table('sales') ->orderByRaw("FIELD(state , 'SENT', 'DRAFT', 'DONE', 'CANCEL') ASC") ->get();
Eloquent
$sales = Sale::orderByRaw("FIELD(state , 'SENT', 'DRAFT', 'DONE', 'CANCEL') ASC") ->paginate(100);