Laravel 4 में कई कॉलम के लिए ऑर्डर का उपयोग कैसे करें?


230

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

SELECT *
FROM mytable
ORDER BY
  coloumn1 DESC, coloumn2 ASC

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


बहुत आसान। User::orderBy('name', 'DESC') ->orderBy('email', 'ASC') ->get();
मैं

जवाबों:


372

बस orderBy()जरूरत पड़ने पर कई बार आह्वान करें । उदाहरण के लिए:

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

निम्नलिखित क्वेरी का उत्पादन करता है:

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

16
यह अच्छा होगा यदि हम एक सरणी को पास कर सकते हैं जैसे: User::orderBy(array('name'=>'desc', 'email'=>'asc'))
जोशुआ डेविड

10
@ फ़ायरकोडिंग, आप कर सकते हैं$user->orders = array(array('column' => 'name', 'direction' => 'desc'), array('column' => 'email', 'direction' => 'asc'));
rmobis

क्या एक स्थापित क्वेरी पर ऑर्डर जोड़ने का एक तरीका है?
राफेल

@ राफेल, यदि आपने पहले से इसे नहीं बुलाया (बुलाया getया first), तो बस orderByउस पर कॉल करें । Else, nope।
रंबिस

अन्यथा, यदि आपको हमेशा डीआरसी द्वारा ऑर्डर करने की आवश्यकता होती है, तो आप नवीनतम () का भी उपयोग कर सकते हैं।
ssi-aik

30

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

order byदो बार उपयोग करना :

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

और ऐसा करने का दूसरा तरीका है,

का उपयोग कर raw order by:

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

दोनों एक ही क्वेरी को फॉलो करेंगे,

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

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

$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();

आशा करता हूँ की ये काम करेगा :)


क्या मैं ऑर्डरबाय और ऑर्डरबी का एक साथ उपयोग कर सकता हूं? मेरे लिए काम करने के लिए प्रतीत नहीं होता है, जिसके परिणामस्वरूप क्वेरी केवल आदेश का सम्मान करने लगती है --Raw
रिटर्न -1

orderBy पहले और उसके बाद orderByRaw डाल करने के लिए कोशिश करते हैं और परिणाम @GeorgeAvgoustis देख
सागर Naliyapara

दुर्भाग्य से ऐसा नहीं किया जा सकता है क्योंकि इसे पहले यादृच्छिक करने की आवश्यकता होती है और फिर अंतिम क्वालिफायर द्वारा आदेश दिया जाता है।
वापसी -1

1
यह एक साथ काम करता है क्योंकि हो सकता है कि पहला कॉलम छँटाई करने पर आप दूसरे कॉलम को
छँटते हुए

3

यहाँ एक और चकमा दिया गया है जो मैं अपने आधार भंडार वर्ग के लिए आया हूँ जहाँ मुझे स्तंभों की संख्या के आधार पर ऑर्डर करने की आवश्यकता है:

public function findAll(array $where = [], array $with = [], array $orderBy = [], int $limit = 10)
{
    $result = $this->model->with($with);
    $dataSet = $result->where($where)
        // Conditionally use $orderBy if not empty
        ->when(!empty($orderBy), function ($query) use ($orderBy) {
            // Break $orderBy into pairs
            $pairs = array_chunk($orderBy, 2);
            // Iterate over the pairs
            foreach ($pairs as $pair) {
                // Use the 'splat' to turn the pair into two arguments
                $query->orderBy(...$pair);
            }
        })
        ->paginate($limit)
        ->appends(Input::except('page'));

    return $dataSet;
}

अब, आप अपना कॉल इस तरह कर सकते हैं:

$allUsers = $userRepository->findAll([], [], ['name', 'DESC', 'email', 'ASC'], 100);
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.