Maison > cadre php > Laravel > Comment utiliser la méthode chunk de Laravel

Comment utiliser la méthode chunk de Laravel

WBOY
Libérer: 2022-06-06 15:12:55
original
5479 Les gens l'ont consulté

Dans Laravel, la méthode chunk() est utilisée pour diviser une collection en plusieurs collections plus petites de tailles spécifiées. La syntaxe est "$specified collection->chunk(specified number);"; les données de chaque utilisateur après la mise à jour, de sorte qu'une grande quantité de données ne soit pas obtenue lors de l'interrogation des données, ce qui peut réduire la pression sur le système.

Comment utiliser la méthode chunk de Laravel

L'environnement d'exploitation de cet article : système Windows 10, Laravel version 6, ordinateur Dell G3.

Comment utiliser la méthode chunk de Laravel

chunk()

méthode Chunk pour diviser une collection en plusieurs collections plus petites d'une taille donnée. Très utile pour afficher les collections dans une grille.

$prices = collect([18, 23, 65, 36, 97, 43, 81]);
$prices = $prices->chunk(3);
$prices->toArray();
Copier après la connexion

Le code ci-dessus génère l'effet.

[
    0 => [
        0 => 18,
        1 => 23,
        2 => 65
    ],
    1 => [
        3 => 36,
        4 => 97,
        5 => 43
    ],
    2 => [
        6 => 81
    ]
]
Copier après la connexion

Utilisation générale

S'il y a un tel besoin : interrogez toutes les données de la base de données et effectuez une série de mises à jour

La méthode simple et grossière consiste à utiliser foreach pour exploiter toutes les données interrogées, puis à les enregistrer dans la base de données.

$users = User::all();
foreach ($users as $user) {
  $some_value = ($user->some_field > 0) ? 1 : 0;
  $user->update(['some_other_field' => $some_value]);
}
Copier après la connexion

Si les données sont très volumineuses, le système peut manquer de mémoire, et cette méthode est évidemment maladroite.

Laravel fournit une solution simple pour cela

La méthode chunk de Laravel peut diviser la collection en plusieurs petites collections de tailles spécifiées

User::chunk(100, function ($users) {
  foreach ($users as $user) {
    $some_value = ($user->some_field > 0) ? 1 : 0;
    $user->update(['some_other_field' => $some_value]);
  }
});
Copier après la connexion

Le principe de l'exécution du code ci-dessus est le suivant :

Exécutez un chunk, et ce chunk en découvrira 100 données utilisateur, mettez à jour chaque donnée utilisateur

Vérifiez ensuite 100 données utilisateur, puis effectuez l'opération de mise à jour, et ainsi de suite.

Cela signifie que lors de l'interrogation de données, vous n'obtiendrez pas une grande quantité de données de la base de données, 100 éléments de données sont interrogés à chaque fois, au lieu de la table entière.

Cela réduira la pression sur le système.

2. Choses à noter

Voici l'objet de cet article :

Mais attention, les résultats du filtre ne peuvent pas être exécutés comme ça

User::where('approved', 0)->chunk(100, function ($users) {
  foreach ($users as $user) {
    $user->update(['approved' => 1]);
  }
});
Copier après la connexion

En termes d'exécution de code, cette instruction ne provoquera aucune erreur

Mais ici Le problème est que vous souhaitez filtrer les utilisateurs avec approved=0, effectuer des opérations de base de données avec approved=1

, puis fragmenter les 100 éléments de données suivants, après quoi les données ont changé et vous manquerez une page de données.

Cela signifie que vous ne traiterez que la moitié des inscriptions et en laisserez la moitié de côté.

Solution :

Vous pouvez utiliser la méthode chunkById après Laravel 5.2

Vous pouvez vous référer au code suivant avant 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]);
      }
    });
}
Copier après la connexion

[Recommandations associées : tutoriel vidéo laravel]

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal