एलोक्वेंट ओआरएम लार्वा 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.