Trong Laravel, nếu tôi thực hiện một truy vấn:
$foods = Food::where(...)->get();
... sau đó $foods
là một Bộ sưu tập Illuminate của Food
các đối tượng mô hình. (Về cơ bản là một loạt các mô hình.)
Tuy nhiên, các khóa của mảng này chỉ đơn giản là:
[0, 1, 2, 3, ...]
... vì vậy nếu tôi muốn thay đổi Food
đối tượng có id
số là 24, tôi không thể thực hiện điều này:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... bởi vì điều này sẽ chỉ thay đổi phần tử thứ 25 trong mảng, không phải phần tử có id
số 24.
Làm cách nào để lấy một (hoặc nhiều) phần tử từ một bộ sưu tập theo BẤT KỲ thuộc tính / cột nào (chẳng hạn như, nhưng không giới hạn ở, id / color / age / v.v.)?
Tất nhiên, tôi có thể làm điều này:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... nhưng, điều đó thật thô thiển.
Và, tất nhiên, tôi có thể làm điều này:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... nhưng điều đó thậm chí còn thô thiển hơn , vì nó thực hiện thêm một truy vấn không cần thiết khi tôi đã có đối tượng mong muốn trong $foods
bộ sưu tập.
Cảm ơn trước cho bất kỳ hướng dẫn.
BIÊN TẬP:
Để rõ ràng hơn, bạn có thể gọi ->find()
một Bộ sưu tập Illuminate mà không tạo ra một truy vấn khác, nhưng nó chỉ chấp nhận một ID chính. Ví dụ:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Tuy nhiên, vẫn không có cách nào rõ ràng (không lặp lại, không truy vấn) để lấy (các) phần tử theo thuộc tính từ Bộ sưu tập, như sau:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(