Dans Laravel, si j'effectue une requête:
$foods = Food::where(...)->get();
... $foods
est alors une collection Illuminate d' Food
objets modèles. (Essentiellement un tableau de modèles.)
Cependant, les clés de ce tableau sont simplement:
[0, 1, 2, 3, ...]
... donc si je veux modifier, par exemple, l' Food
objet avec un id
de 24, je ne peux pas faire ceci:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... car cela modifiera simplement le 25e élément du tableau, pas l'élément avec un id
de 24.
Comment obtenir un (des) élément (s) unique (ou plusieurs) d'une collection par TOUT attribut / colonne (tel que, mais sans s'y limiter, id / couleur / âge / etc.)?
Bien sûr, je peux faire ceci:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... mais c'est juste dégoûtant.
Et, bien sûr, je peux faire ceci:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... mais c'est encore plus grossier , car il effectue une requête supplémentaire inutile lorsque j'ai déjà l'objet souhaité dans la $foods
collection.
Merci d'avance pour tous conseils.
ÉDITER:
Pour être clair, vous pouvez appeler ->find()
sur une collection Illuminate sans fraie une autre requête, mais il n'accepte une pièce d' identité primaire. Par exemple:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Cependant, il n'y a toujours pas de moyen propre (sans boucle, sans requête) de récupérer un ou plusieurs éléments par un attribut d'une collection, comme ceci:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(