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

Cara menggunakan kaedah chunk laravel

WBOY
WBOYasal
2022-06-06 15:12:555416semak imbas

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.

Cara menggunakan kaedah chunk laravel

Persekitaran pengendalian artikel ini: sistem Windows 10, Laravel versi 6, komputer Dell G3.

Cara menggunakan kaedah chunk laravel

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn