У 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.
Як отримати один (або декілька) елементів із колекції за БУДЬ-ЯКИМ атрибутом / стовпцем (наприклад, але, не обмежуючись цим, id / color / age / тощо)?
Звичайно, я можу зробити це:
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()
на Illuminate колекції без нересту іншого запиту, але він тільки приймає первинний ідентифікатор. Наприклад:
$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. :(