Laravel: получить объект из коллекции по атрибуту
В 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 / etc.)?
Конечно, я могу сделать это:
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. :(