Laravelでクエリを実行すると:
$foods = Food::where(...)->get();
...その後$foods
で照らしなさいコレクションのFood
モデルオブジェクト。(基本的にはモデルの配列です。)
ただし、この配列のキーは単純です。
[0, 1, 2, 3, ...]
...たとえば、が24のFood
オブジェクトを変更したい場合id
、これを行うことはできません。
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
...これはid
、24の要素ではなく、配列の25番目の要素を変更するだけだからです。
任意の属性/列(ID /色/年齢など)によってコレクションから単一(または複数)の要素を取得するにはどうすればよいですか?
もちろん、私はこれを行うことができます:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
...しかし、それはただひどいです。
そして、もちろん、私はこれを行うことができます:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
...それはだ、さらに総私はすでにで目的のオブジェクトを持っている場合、それは追加の不必要なクエリを実行するため、$foods
コレクション。
ご指導ありがとうございます。
編集:
明確にするために、別のクエリを生成せずにIlluminateコレクションを呼び出すことができ->find()
ますが、それはプライマリIDのみを受け入れます。例えば:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
ただし、次のように、コレクションから属性によって要素を取得するためのクリーンな(ループやクエリを行わない)方法はまだありません。
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(