লারাভেলে, আমি যদি কোনও জিজ্ঞাসা করি:
$foods = Food::where(...)->get();
... তারপর $foods
একটি হল জ্বালান সংগ্রহ এর Food
মডেল বস্তু। (মূলত মডেলগুলির একটি অ্যারে))
তবে এই অ্যারের কীগুলি কেবল সহজ:
[0, 1, 2, 3, ...]
... সুতরাং যদি আমি 24 Food
টির সাথে একটি অবজেক্টটি পরিবর্তন করতে চাই, তবে id
আমি এটি করতে পারি না:
$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. :(