Laravel में, यदि मैं कोई क्वेरी करता हूं:
$foods = Food::where(...)->get();
...फिर $foods
मॉडल वस्तुओं का एक प्रकाशित संग्रह है Food
। (अनिवार्य रूप से मॉडल की एक सरणी।)
हालाँकि, इस सरणी की कुंजी बस हैं:
[0, 1, 2, 3, ...]
... इसलिए अगर मैं बदलना चाहता हूं, तो कहना है, एक Food
वस्तु के साथid
24 , मैं ऐसा नहीं कर सकता:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... क्योंकि यह केवल सरणी में 25 वें तत्व को बदल देगा, id
24 के तत्व के साथ नहीं ।
मैं किसी भी विशेषता / कॉलम (जैसे, लेकिन आईडी / रंग / आयु / आदि तक सीमित नहीं) के संग्रह से एक (या एकाधिक) तत्व कैसे प्राप्त कर सकता हूं?
बेशक, मैं यह कर सकता हूं:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... लेकिन, यह सिर्फ सकल है।
और, निश्चित रूप से, मैं यह कर सकता हूं:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... लेकिन यह और भी अधिक सकल है , क्योंकि यह एक अतिरिक्त अनावश्यक क्वेरी करता है जब मेरे पास पहले से ही $foods
संग्रह में वांछित वस्तु है ।
किसी भी मार्गदर्शन के लिए अग्रिम धन्यवाद।
संपादित करें:
स्पष्ट होने के लिए, आप किसी अन्य क्वेरी को प्रकाशित किए बिना एक प्रकाशित संग्रह पर कॉल कर सकते हैं->find()
, लेकिन यह केवल एक प्राथमिक आईडी को स्वीकार करता है। उदाहरण के लिए:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
हालांकि, इस तरह के संग्रह से एक तत्व (ओं) को हथियाने के लिए अभी भी कोई साफ (गैर-लूपिंग, गैर-क्वेरी) तरीका नहीं है:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(