एलोक्वेंट ओआरएम लार्वा 5 आईडी का एरियर प्राप्त करें


84

मैं एलोक्वेंट ओआरएम लार्वा 5.1 का उपयोग कर रहा हूं, मैं 0 से अधिक आईडी की एक सरणी वापस करना चाहता हूं, मेरा मॉडल कहा जाता है test

मैंने कोशिश की है :

$test=test::select('id')->where('id' ,'>' ,0)->get()->toarray();

यह वापस लौटा:

Array ( [0] => Array ( [id] => 1 ) [1] => Array ( [id] => 2 ) )

लेकिन मैं परिणाम को सरल सरणी में रखना चाहता हूं जैसे:

Array ( 1,2 )

जवाबों:


208

आप उपयोग कर सकते हैं lists():

test::where('id' ,'>' ,0)->lists('id')->toArray();

नोट: यदि आप अपने मॉडल को Studly Caseप्रारूप में परिभाषित करते हैं , जैसे Test


आप यह भी उपयोग कर सकते हैं get():

test::where('id' ,'>' ,0)->get('id');

अद्यतन: (संस्करणों के लिए = = 5.2)

lists()विधि था पदावनत नए संस्करणों में >= 5.2, अब आप इस्तेमाल कर सकते हैं pluck()बजाय विधि:

test::where('id' ,'>' ,0)->pluck('id')->toArray();

नोट: यदि आपको एक स्ट्रिंग की आवश्यकता है , उदाहरण के लिए एक ब्लेड में , तो आप ऐरे () भाग के बिना फ़ंक्शन का उपयोग कर सकते हैं , जैसे:

test::where('id' ,'>' ,0)->pluck('id');

3
प्लक ('आईडी') के साथ ऐरे ('0' => 12, '1' => 14) और आदि है, जहां व्हाट इन ('आईडी', $ एरे) में इस्तेमाल होने पर, यह आईडी से नहीं, बल्कि ऐरे से चयन करता है। कुंजी, तो 0,1 से ...
Gediminas

2
toArray()की तरह एक सरणी वापस आ जाएगी[12,14]
ज़कारिया Acharki

1
अरे हाँ, आप सही हैं, मैं डिबगबर चींटी प्रिंट_आर के माध्यम से डिबगिंग कर रहा था, और दोनों ने कुंजियों के साथ सरणी मान दिखाए, लेकिन कोई कुंजी नहीं है। धन्यवाद!
गेदमिनस

हम एक परियोजना के लिए 4.2 पर अटक गए हैं, इसलिए मैं -> सूचियों ('आईडी') के संदर्भ को ध्यान में रखते हुए सराहना करता हूं। हालाँकि यह एक सरणी को सीधे उत्पन्न करता है, लेकिन इसे>> इसमें शामिल करने की आवश्यकता नहीं है।
डस्टिन ग्राहम

18

एक Collectionऔर तरीके से , आप यह कर सकते हैं:

$collection->pluck('id')->toArray()

यह एक अनुक्रमित सरणी लौटाएगा whereIn(), उदाहरण के लिए, एक क्वेरी में लार्वा द्वारा पूरी तरह से प्रयोग करने योग्य ।


2
ड्रॉप डाउन सूची के लिए भी उपयोग किया जाता है।
बीरा

मॉडल से प्लक करने के लिए संग्रह प्राप्त करने के लिए \YourModel::all(['id'])... ->pluck...(केवल आईडी कॉलम निर्दिष्ट करने से आप सभी डेटा को मॉडल पर लोड नहीं करते हैं)
jave.web

5

इसका सही उत्तर विधि है lists, यह इस तरह से बहुत सरल है:

$test=test::select('id')->where('id' ,'>' ,0)->lists('id');

सादर!


कैसे आप संबंधित आईडी की सूची सरणी में एक के माध्यम से कई संबंधों के लिए प्राप्त करेंगे ??
पथरोस

शायद आप DB क्लास का उपयोग कर सकते हैं, उदाहरण: DB :: table ('name_of_table') -> जहां (('कंडीशन') -> सूचियां ('id');
रेडम्स ई। हर्नांडेज़

5

आप all()विधि के बजाय विधि का उपयोग कर सकते हैं toArray()(और देखें: लार्वा प्रलेखन ):

test::where('id' ,'>' ,0)->pluck('id')->all(); //returns array

यदि आपको आवश्यकता है string, तो आप बिना toArray()अनुलग्नक के उपयोग कर सकते हैं :

test::where('id' ,'>' ,0)->pluck('id'); //returns string

4

सूचियों () विधि के बारे में पढ़ें

$test=test::select('id')->where('id' ,'>' ,0)->lists('id')->toArray()

जब मैं ब्लेड फ़ाइल में in_array_command का उपयोग करता हूं, तो यह त्रुटि दिखाई देती है। > in_array () पैरामीटर 2 को सरणी, ऑब्जेक्ट दिए जाने की उम्मीद करता है
पैरानॉयड

ओह अब मैं तुम्हें ले जाता हूं, आपको ऐरा (), सूचियों () संग्रह को वापस लाने की आवश्यकता है
अमीर बार

0

यदि आप उपयोग कर रहे हैं तो बस एक अतिरिक्त जानकारी DB:

DB::table('test')->where('id', '>', 0)->pluck('id')->toArray();

और अगर एलोकेंट मॉडल का उपयोग कर रहे हैं:

test::where('id', '>', 0)->lists('id')->toArray();

0

यद्यपि आपने उत्तर को चिह्नित किया है, यह बहुत सरल दृष्टिकोण है

App\User::pluck('id')->toArray()

-2

आप चयनित विशेषताओं की सरणी प्राप्त करने के लिए सभी () विधि का उपयोग भी कर सकते हैं।

$test=test::select('id')->where('id' ,'>' ,0)->all();

सादर


1
यह काम नहीं करता है। यह कहता है कि अपरिभाषित पद्धति पर कॉल करें \ n डेटाबेस को रोशन करें \
_
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.