Di Laravel, jika saya melakukan kueri:
$foods = Food::where(...)->get();
... kemudian $foods
adalah Koleksi Illuminate dari Food
obyek model. (Pada dasarnya serangkaian model.)
Namun, kunci dari array ini hanyalah:
[0, 1, 2, 3, ...]
... jadi jika saya ingin mengubah, katakanlah, Food
objek dengan id
24, saya tidak bisa melakukan ini:
$desired_object = $foods->get(24);
$desired_object->color = 'Green';
$desired_object->save();
... karena ini hanya akan mengubah elemen ke-25 dalam larik, bukan elemen dengan id
24.
Bagaimana cara mendapatkan satu (atau beberapa) elemen dari koleksi berdasarkan atribut / kolom APA SAJA (seperti, tetapi tidak terbatas pada, id / color / age / etc.)?
Tentu saja, saya bisa melakukan ini:
foreach ($foods as $food) {
if ($food->id == 24) {
$desired_object = $food;
break;
}
}
$desired_object->color = 'Green';
$desired_object->save();
... tapi, itu menjijikkan.
Dan, tentu saja, saya bisa melakukan ini:
$desired_object = Food::find(24);
$desired_object->color = 'Green';
$desired_object->save();
... tapi itu bahkan lebih menjijikkan , karena melakukan kueri tambahan yang tidak perlu ketika saya sudah memiliki objek yang diinginkan dalam $foods
koleksi.
Terima kasih sebelumnya atas panduan apa pun.
EDIT:
Untuk memperjelas, Anda dapat memanggil ->find()
Koleksi Iluminasi tanpa memunculkan kueri lain, tetapi hanya menerima ID utama. Contohnya:
$foods = Food::all();
$desired_food = $foods->find(21); // Grab the food with an ID of 21
Namun, masih belum ada cara yang bersih (non-perulangan, non-kueri) untuk mengambil elemen dengan atribut dari Koleksi, seperti ini:
$foods = Food::all();
$green_foods = $foods->where('color', 'green'); // This won't work. :(