chunk (specified number);" data pengguna supaya sejumlah besar data tidak diperoleh semasa membuat pertanyaan data, yang boleh mengurangkan tekanan pada sistem."/> chunk (specified number);" data pengguna supaya sejumlah besar data tidak diperoleh semasa membuat pertanyaan data, yang boleh mengurangkan tekanan pada sistem.">
Rumah > Artikel > rangka kerja php > Cara menggunakan kaedah chunk laravel
Dalam laravel, kaedah chunk() digunakan untuk membahagikan koleksi kepada berbilang koleksi yang lebih kecil daripada saiz tertentu Sintaks ialah "$specified collection->chunk(specified number);"; data pengguna dikemas kini sebelum melihat setiap data pengguna Dengan cara ini, sejumlah besar data tidak diperoleh semasa membuat pertanyaan data, yang boleh mengurangkan tekanan pada sistem.
Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.
chunk()
kaedah chunk membahagikan koleksi kepada berbilang koleksi yang lebih kecil daripada saiz tertentu. Sangat berguna untuk memaparkan koleksi ke dalam grid.
$prices = collect([18, 23, 65, 36, 97, 43, 81]); $prices = $prices->chunk(3); $prices->toArray();
Kod di atas menjana kesan.
[ 0 => [ 0 => 18, 1 => 23, 2 => 65 ], 1 => [ 3 => 36, 4 => 97, 5 => 43 ], 2 => [ 6 => 81 ] ]
Penggunaan am
Jika terdapat keperluan sedemikian: tanya semua data dalam pangkalan data dan lakukan satu siri kemas kini
Mudah dan mentah Kaedahnya ialah menggunakan foreach untuk mengendalikan semua data yang ditanya, dan kemudian menyimpannya dalam pangkalan data.
$users = User::all(); foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); }
Jika data sangat besar, sistem mungkin kehabisan memori, dan kaedah ini jelas kekok.
Laravel menyediakan penyelesaian mudah untuk ini
Kaedah chunk Laravel boleh membahagikan koleksi kepada beberapa koleksi kecil saiz tertentu
User::chunk(100, function ($users) { foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); } });
Kod di atas berjalan Prinsipnya ialah:
Jalankan sebahagian, bahagian ini akan mengetahui 100 data pengguna, mengemas kini setiap data pengguna
Kemudian semak 100 data pengguna, dan kemudian lakukan operasi kemas kini, dan seterusnya analogi.
Ini bermakna apabila membuat pertanyaan data, anda tidak akan mendapat sejumlah besar data daripada pangkalan data, 100 keping data akan disoal setiap kali, bukannya keseluruhan jadual.
Ini akan mengurangkan tekanan pada sistem.
2. Perkara yang perlu diberi perhatian
Tumpuan artikel ini ialah:
Tetapi berhati-hati, anda tidak boleh menjalankannya seperti ini jika anda telah menapis hasil
User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } });
Dari segi pelaksanaan kod, pernyataan ini tidak menyebabkan sebarang ralat
Tetapi masalahnya di sini ialah anda ingin menapis diluluskan=0 pengguna, melaksanakan diluluskan=1 operasi pangkalan data
dan kemudian chunk Untuk 100 keping data seterusnya, data telah berubah pada masa ini dan anda akan terlepas satu halaman data.
Ini bermakna anda hanya akan memproses separuh daripada penyertaan dan meninggalkan separuh daripadanya.
Penyelesaian:
Anda boleh menggunakan kaedah chunkById selepas Laravel 5.2
Anda boleh merujuk kepada kod berikut sebelum Laravel 5.2
while(User::where('approved', 0)->count() > 0) { User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } }); }
[Berkaitan cadangan: Tutorial video Laravel】
Atas ialah kandungan terperinci Cara menggunakan kaedah chunk laravel. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!