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.  :(

Ответы на вопрос(9)

Ваш ответ на вопрос