在Laravel中,如果我执行查询:
$foods = Food::where(...)->get();
......然后$foods
是照亮收集的Food
模型对象。(本质上是一系列模型。)
但是,此数组的键很简单:
[0, 1, 2, 3, ...]
...因此,如果我想更改Food
对象id
为24的对象,则无法执行以下操作:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
...因为这只会改变数组中的第25个元素,而不是具有id
24个元素的元素。
如何通过ANY属性/列(例如但不限于id / color / age /等)从集合中获取单个(或多个)元素?
当然,我可以这样做:
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
集合中已经有所需的对象时,它会执行其他不必要的查询。
在此先感谢您的指导。
编辑:
明确地说,您可以调用->find()
Illuminate Collection,而不会产生其他查询,但是它仅接受主ID。例如:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
但是,仍然没有干净的(非循环,非查询)方式来通过Collection中的属性来获取元素,如下所示:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(