Wenn ich in Laravel eine Abfrage durchführe:
$foods = Food::where(...)->get();
... dann $foodsist eine Illuminate Collection von FoodModellobjekten. (Im Wesentlichen eine Reihe von Modellen.)
Die Schlüssel dieses Arrays sind jedoch einfach:
[0, 1, 2, 3, ...]
... Wenn ich also beispielsweise das FoodObjekt mit einer idvon 24 ändern möchte , kann ich dies nicht tun:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... weil dies lediglich das 25. Element im Array ändert, nicht das Element mit einem idvon 24.
Wie erhalte ich ein einzelnes (oder mehrere) Element (e) aus einer Sammlung nach JEDEM Attribut / jeder Spalte (z. B. ID / Farbe / Alter / usw.), ohne darauf beschränkt zu sein?
Natürlich kann ich das tun:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... aber das ist nur eklig.
Und natürlich kann ich das tun:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... aber das ist noch schlimmer , weil es eine zusätzliche unnötige Abfrage ausführt, wenn ich bereits das gewünschte Objekt in der $foodsSammlung habe.
Vielen Dank im Voraus für jede Anleitung.
BEARBEITEN:
Um klar zu sein, können Sie eine Illuminate Collection aufrufen, ohne eine weitere Abfrage zu erzeugen->find() , aber es wird nur eine primäre ID akzeptiert. Zum Beispiel:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Es gibt jedoch immer noch keine saubere (nicht schleifenförmige, nicht abfragende) Möglichkeit, ein oder mehrere Elemente anhand eines Attributs aus einer Sammlung wie folgt zu erfassen:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(