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