Laravel: Pobierz obiekt z kolekcji według atrybutów

W Laravel, jeśli wykonam zapytanie:

$foods = Food::where(...)->get();

...następnie$foods jestPodświetl kolekcję zFood obiekty modelu. (Zasadniczo szereg modeli.)

Jednak klucze tej tablicy są po prostu:

[0, 1, 2, 3, ...]

... więc jeśli chcę zmienić, powiedzmy,Food obiekt zid z 24, nie mogę tego zrobić:

$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();

... ponieważ zmieni to tylko 25 element w tablicy, a nie element zid z 24.

Jak uzyskać pojedynczy (lub wiele) elementów z kolekcji według DOWOLNEGO atrybutu / kolumny (np. Id / color / age / itp.)?

Oczywiście mogę to zrobić:

foreach ($foods as $food) {
    if ($food->id == 24) {
        $desired_object = $food;
        break;
    }
}
$desired_object->color = 'Green';
$desired_object->save();

... ale to po prostu obrzydliwe.

I oczywiście mogę to zrobić:

$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();

...ale tojeszcze bardziej obrzydliwy, ponieważ wykonuje dodatkowe niepotrzebne zapytanie, gdy już mam żądany obiekt w$foods kolekcja.

Z góry dziękuję za wszelkie wskazówki.

EDYTOWAĆ:

Aby być jasnym, tymogą połączenie->find() w kolekcji Illuminate bez tworzenia kolejnego zapytania, ale totylko akceptuje podstawowy identyfikator. Na przykład:

$foods = Food::all();
$desired_food = $foods->find(21);  // Grab the food with an ID of 21

Jednak nadal nie ma czystego (nie zapętlonego, nie odpytującego) sposobu na pobranie elementu (ów) przez atrybut z kolekcji, taki jak ten:

$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work.  :(

questionAnswers(9)

yourAnswerToTheQuestion