Laravel'de bir sorgu yaparsam:
$foods = Food::where(...)->get();
... sonra $foodsbir olan Illuminate Koleksiyon ait Foodmodeli nesneler. (Esasen bir dizi model.)
Ancak, bu dizinin anahtarları basitçe:
[0, 1, 2, 3, ...]
... yani Foodnesneyi id24 ile değiştirmek istersem , bunu yapamam:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... çünkü bu id, 24 numaralı öğeyi değil, dizideki 25. öğeyi değiştirecektir .
HERHANGİ bir özniteliğe / sütuna göre bir koleksiyondan tek bir (veya birden fazla) öğeyi nasıl alabilirim (bunlarla sınırlı olmamak üzere, id / renk / yaş / vb.)?
Tabii ki bunu yapabilirim:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... ama bu sadece iğrenç.
Ve tabii ki bunu yapabilirim:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... ama bu daha da iğrenç , çünkü $foodskoleksiyonda istenen nesneye zaten sahip olduğumda gereksiz ek bir sorgu gerçekleştiriyor .
Herhangi bir rehberlik için şimdiden teşekkür ederiz.
DÜZENLE:
Açık olmak gerekirse ,->find() başka bir sorgu oluşturmadan bir Illuminate Koleksiyonu'nu çağırabilirsiniz , ancak yalnızca birincil kimliği kabul eder. Örneğin:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Ancak, bir Koleksiyondaki bir özniteliğe göre öğe (ler) elde etmenin temiz (döngüsel olmayan, sorgulamayan) bir yolu yoktur, örneğin:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(