2013-06-09 8 views
131

मैं लारवेल 4 में कई कॉलमों को सॉर्ट करना चाहता हूं, विधि विधि orderBy() का उपयोग करें। क्वेरी इस तरह से उत्पन्न होगी:लार्वेल 4 में एकाधिक कॉलम के लिए ऑर्डर का उपयोग कैसे करें?

SELECT * 
FROM mytable 
ORDER BY 
    coloumn1 DESC, coloumn2 ASC 

मैं कैसे कर सकता हूं?

उत्तर

225

बस आपको जितनी बार आवश्यकता हो orderBy() का आह्वान करें। उदाहरण के लिए:

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

उत्पादन निम्न क्वेरी:

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

यह अच्छा होगा अगर हम की तरह एक सरणी गुजारें सकता: 'उपयोगकर्ता :: orderBy (सरणी (' नाम '=>' desc ',' ईमेल '=>' asc ')) ' – JoshuaDavid

+10

@ फ़िरकोडिंग, आप' $ उपयोगकर्ता-> ऑर्डर = सरणी (सरणी (' कॉलम '=>' नाम ',' दिशा '= > 'desc'), सरणी ('कॉलम' => 'ईमेल', 'दिशा' => 'asc')); ' – rmobis

+0

क्या कोई स्थापित क्वेरी पर ऑर्डर जोड़ने का कोई तरीका है? – Rafael

8

रूप @rmobis उसके जवाब में निर्दिष्ट है, [इसे में कुछ और जोड़ना]

order by दो बार का उपयोग आप कर सकते हैं:

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

और सेकंड जैसा कि पहले उत्तर आप कर सकते हैं की टिप्पणी में निर्दिष्ट @rmobis,

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

दोनों एक ही क्वेरी का उत्पादन करेगा का पालन के रूप में

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

: दूसरी तरह से

raw order by का उपयोग करते हुए यह है क्या करना है, कॉलम द्वारा ऑर्डर करने के लिए सरणी की तरह पास करें,

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

यह पाश में iterate है क्या करने के लिए एक और रास्ता,

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

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

$results = $query->get(); 

आशा है कि यह मदद करता है :)

+0

क्या मैं ऑर्डरब्राउ और ऑर्डर का उपयोग कर सकता हूं? मेरे लिए काम नहीं लग रहा है, परिणामी क्वेरी केवल ऑर्डर का सम्मान करती है ByRaw –

+0

ऑर्डर देने का प्रयास करें पहले और फिर ऑर्डर करें और परिणाम देखें @GeorgeAvgoustis –

+0

दुर्भाग्य से ऐसा नहीं किया जा सकता क्योंकि इसे पहले यादृच्छिक रूप से याद किया जाना चाहिए और फिर अंतिम क्वालीफायर द्वारा ऑर्डर करना चाहिए । –

संबंधित मुद्दे