लारवेल एलोकेंट: सभी के आदेश के परिणाम ()


214

मैं एक साधारण काम पर अटका हुआ हूं। मुझे इस कॉल से आने वाले परिणामों को क्रमबद्ध करने की आवश्यकता है

$results = Project::all();

Projectएक मॉडल कहां है मैंने यह कोशिश की है

$results = Project::all()->orderBy("name");

लेकिन यह काम नहीं किया। टेबल से सभी डेटा प्राप्त करने और उन्हें ऑर्डर करने का बेहतर तरीका कौन सा है?

जवाबों:


384

आप वास्तव में क्वेरी के भीतर ऐसा कर सकते हैं।

$results = Project::orderBy('name')->get();

यह उचित परिणाम के साथ सभी परिणाम लौटाएगा।


यहाँ डॉक्स हैं: laravel.com/docs/5.7/eloquent#retrieving-models
Ryan

और get()बनाम स्पष्टीकरण के लिए all(): stackoverflow.com/questions/34587457/…
patricus

114

यदि आप वस्तुओं का संग्रह लौटाते हैं तब भी आप क्रमबद्ध (क्वेरी स्तर पर) के बजाय क्रमबद्ध (संग्रह स्तर पर) का उपयोग कर सकते हैं।

आरोही क्रम

$results = Project::all()->sortBy("name");

घटते क्रम में

$results = Project::all()->sortByDesc("name");

अधिक विवरण के लिए संग्रह के बारे में दस्तावेज़ीकरण देखें।

https://laravel.com/docs/5.1/collections


ठीक वही जो मेरे द्वारा खोजा जा रहा था। orderByक्वेरी स्तर पर उपयोग करने की तुलना में इसके व्यापक उपयोग में कोई कमी होगी ?
गिद्रियस

1
\ @foreach ($ पोस्ट-> SortByDesc ('create_at') को $ पोस्ट के रूप में) \ @include ('posts.post') \ @endforeach
sdexp

2
मुझे यह जानने में दिलचस्पी है कि यह पर्दे के पीछे कैसे काम करता है। यह मेरे साथ मारपीट करता है, क्योंकि संग्रह sortBy()को Laravel Engine (PHP में) के अंदर होता है, जबकि orderBy()डेटाबेस में किया जाता है। निश्चित रूप से डेटाबेस लगभग सभी बोधगम्य स्थितियों में तेज होने जा रहा है, और जैसे-जैसे आपका डेटासेट बढ़ता है, प्रदर्शन में असमानता आएगी। मुझे इस पर अन्य लोगों के विचार सुनना अच्छा लगेगा।
कार्टाबेफोर्स

3
@ cartbeforehorse आपको यह जानने की आवश्यकता है कि कौन सी विधि वापस आती है। :: सभी () शायद सिर्फ कॉल -> मिलता है () हुड के तहत, जो बदले में, एक संग्रह लौटाता है। SortBy () एक संग्रह की एक विधि है, इसलिए हाँ यह PHP की तरफ होता है (जैसा कि ऑर्डरबी के विपरीत) () जिसे क्वेरी ऑब्जेक्ट पर कहा जाता है)। यह उपयोग करने के लिए एक बुरा विचार है :: सभी () सभी, अकेले इसे PHP में सॉर्ट करने दें। कल्पना करें कि :: सभी () लाखों वस्तुओं के साथ एक संग्रह लौटाता है। इसे लाने में बहुत अधिक समय लगेगा और PHP में इसे सॉर्ट करने के लिए और भी अधिक समय। बेशक, आप उपयोग कर सकते हैं :: सभी () अगर आपको पता है कि यह सिर्फ एक मुट्ठी भर वस्तुओं (एक संग्रह में) को वापस करेगा।
अविराम

यह एक स्वीकृत उत्तर क्यों नहीं है? यह सभी () फ़ंक्शन के साथ काम करता है।
विशालपार्क

36

इसके अलावा, बस पूर्व उत्तरों को दबाने के लिए, इसे descया ascतो दूसरे पैरामीटर के रूप में जोड़कर अवरोही या आरोही क्रम में हल किया जा सकता है ।

$results = Project::orderBy('created_at', 'desc')->get();


10

जबकि आपको डेस के रूप में तारीख के लिए परिणाम की आवश्यकता है

$results = Project::latest('created_at')->get();

9

यह करो:

$results = Project::orderBy('name')->get();

यह मत करो:

$results = Project::all()->sortBy('name');

क्यों? संक्षेप में, पहला दृष्टिकोण दूसरे दृष्टिकोण से तेज है।


3
यह स्पष्टीकरण देना अच्छा होगा कि क्यों: पहला दृष्टिकोण डेटाबेस (क्वेरी) के स्तर पर आदेश देता है जो लगभग हमेशा अधिक कुशल होता है - सबसे अच्छा प्रदर्शन। मैं कहूंगा कि हमेशा मॉडल दृष्टिकोण का उपयोग करें, जब आपको दूसरे दृष्टिकोण की आवश्यकता होगी, तो आपको पता चल जाएगा :)
jave.web


4

ध्यान दें, आप कर सकते हैं:

$results = Project::select('name')->orderBy('name')->get();

यह एक क्वेरी उत्पन्न करता है:

"SELECT name FROM proyect ORDER BY 'name' ASC"

कुछ एप्लिकेशन में जब DB को ऑप्टिमाइज़ नहीं किया जाता है और क्वेरी अधिक जटिल होती है, और आपको फिनिश SQL में ORDER BY जेनरेट करने से रोकने की आवश्यकता होती है, आप यह कर सकते हैं:

$result = Project::select('name')->get();
$result = $result->sortBy('name');
$result = $result->values()->all();

अब परिणाम का आदेश देने वाले php हैं।


0

आपको निर्देश प्राप्त करने के लिए कॉल की आवश्यकता है, क्योंकि यह अभिलेखों को ला रहा है और सूची को क्रमबद्ध करता है

$results = Project::orderBy('name')
           ->get();

उदाहरण:

$results = Result::where ('id', '>=', '20')
->orderBy('id', 'desc')
->get();

उदाहरण में डेटा "जहां" द्वारा फ़िल्टर किया जाता है और 20 से अधिक रिकॉर्ड करता है और उच्च से निम्न क्रम के अनुसार ऑर्डर सूची बनाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.