In Laravel, se eseguo una query:
$foods = Food::where(...)->get();
... allora $foods
è una Collezione Illuminate diFood
oggetti modello. (Essenzialmente una serie di modelli.)
Tuttavia, le chiavi di questo array sono semplicemente:
[0, 1, 2, 3, ...]
... quindi se voglio modificare, ad esempio, l' Food
oggetto con un valore id
di 24, non posso farlo:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... perché questo altererà semplicemente il 25 ° elemento nell'array, non l'elemento con id
24.
Come ottengo un singolo (o più) elemento (i) da una raccolta da QUALSIASI attributo / colonna (come, ma non limitato a, id / colore / età / ecc.)?
Certo, posso farlo:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... ma è solo schifoso.
E, ovviamente, posso farlo:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... ma è ancora più grossolano , perché esegue una query aggiuntiva non necessaria quando ho già l'oggetto desiderato nella $foods
raccolta.
Grazie in anticipo per qualsiasi consiglio.
MODIFICARE:
Per essere chiari, puoi chiamare ->find()
una collezione Illuminate senza generare un'altra query, ma accetta solo un ID principale. Per esempio:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Tuttavia, non esiste ancora un modo pulito (senza loop, senza query) per afferrare uno o più elementi da un attributo da una Collection, come questo:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(