2013-06-09 16 views

risposta

225

Basta invocare orderBy() tutte le volte che è necessario. Per esempio:

User::orderBy('name', 'DESC') 
    ->orderBy('email', 'ASC') 
    ->get(); 

Produce la seguente query:

SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC 
+12

Sarebbe bello se potessimo passare un array come: 'User :: orderBy (array (' nome '=>' desc ',' email '=>' asc ')) ' – JoshuaDavid

+10

@FireCoding, puoi fare' $ user-> orders = array (array (' column '=>' name ',' direction '= > 'desc'), array ('column' => 'email', 'direction' => 'asc')); ' – rmobis

+0

C'è un modo per aggiungere un ordine da una query stabilita? – Rafael

8

Si può fare @rmobis ha precisato nella sua risposta, [Aggiunta di qualcosa di più in esso]

Utilizzando order by due volte:

MyTable::orderBy('coloumn1', 'DESC') 
    ->orderBy('coloumn2', 'ASC') 
    ->get(); 

e il sec ond modo per farlo è,

Utilizzando raw order by:

MyTable::orderByRaw("coloumn1 DESC, coloumn2 ASC"); 
    ->get(); 

Entrambi produrrà stessa query come segue,

SELECT * FROM `my_tables` ORDER BY `coloumn1` DESC, `coloumn2` ASC 

Come @rmobis specificato nel commento di prima risposta si può passare come una matrice per ordinare per colonna come questo,

$myTable->orders = array(
    array('column' => 'coloumn1', 'direction' => 'desc'), 
    array('column' => 'coloumn2', 'direction' => 'asc') 
); 

un altro modo per farlo è iterate in loop,

$query = DB::table('my_tables'); 

foreach ($request->get('order_by_columns') as $column => $direction) { 
    $query->orderBy($column, $direction); 
} 

$results = $query->get(); 

Speranza che aiuta :)

+0

posso usare orderByRaw E ordinare insieme? sembra non funzionare per me, la query risultante sembra solo rispettare orderByRaw –

+0

provare a mettere orderBy prima e poi ordinareByRaw e vedere il risultato @GeorgeAvgoustis –

+0

sfortunatamente questo non può essere fatto in quanto deve essere prima randomizzato e poi ordinare dal qualificatore finale . –