Heim >PHP-Framework >Laravel >So verwenden Sie die Chunk-Methode von Laravel
In Laravel wird die Methode chunk() verwendet, um eine Sammlung in mehrere kleinere Sammlungen bestimmter Größen aufzuteilen. Die Syntax lautet „$specified collection->chunk(specified number);“; diese Methode führt verschiedene Benutzerdatenprüfungen durch Die Daten jedes Benutzers werden nach der Aktualisierung aktualisiert, sodass beim Abfragen von Daten keine großen Datenmengen abgerufen werden, was den Druck auf das System verringern kann.
Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.
chunk()
chunk-Methode, um eine Sammlung in mehrere kleinere Sammlungen einer bestimmten Größe aufzuteilen. Sehr nützlich für die Anzeige von Sammlungen in einem Raster.
$prices = collect([18, 23, 65, 36, 97, 43, 81]); $prices = $prices->chunk(3); $prices->toArray();
Der obige Code erzeugt den Effekt.
[ 0 => [ 0 => 18, 1 => 23, 2 => 65 ], 1 => [ 3 => 36, 4 => 97, 5 => 43 ], 2 => [ 6 => 81 ] ]
Allgemeine Verwendung
Wenn ein solcher Bedarf besteht: Fragen Sie alle Daten in der Datenbank ab und führen Sie eine Reihe von Aktualisierungen durch
Die einfache und grobe Methode besteht darin, alle abgefragten Daten mit foreach zu verarbeiten und dann zu speichern es in die Datenbank ein.
$users = User::all(); foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); }
Wenn die Daten sehr groß sind, geht dem System möglicherweise der Speicher aus, und diese Methode ist offensichtlich umständlich.
Laravel bietet dafür eine einfache Lösung
Die Chunk-Methode von Laravel kann die Sammlung in mehrere kleine Sammlungen bestimmter Größen aufteilen
User::chunk(100, function ($users) { foreach ($users as $user) { $some_value = ($user->some_field > 0) ? 1 : 0; $user->update(['some_other_field' => $some_value]); } });
Das Prinzip der Ausführung des obigen Codes ist:
Führen Sie einen Chunk aus, und dieser Chunk ermittelt 100 Benutzerdaten, aktualisieren Sie alle Benutzerdaten
Überprüfen Sie dann 100 Benutzerdaten, führen Sie dann den Aktualisierungsvorgang durch und so weiter.
Das bedeutet, dass Sie beim Abfragen von Daten keine große Datenmenge aus der Datenbank erhalten. Es werden jedes Mal 100 Datenelemente und nicht die gesamte Tabelle abgefragt.
Dadurch wird der Druck auf das System verringert.
2. Dinge, die es zu beachten gilt
Hier kommt der Schwerpunkt dieses Artikels:
Aber Vorsicht, Filterergebnisse können nicht auf diese Weise ausgeführt werden
User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } });
In Bezug auf die Codeausführung wird diese Anweisung keine Fehler verursachen
Aber hier Das Problem besteht darin, dass Sie Benutzer mit genehmigt=0 filtern, Datenbankoperationen mit genehmigt=1
ausführen und dann die nächsten 100 Datenteile aufteilen möchten. Zu diesem Zeitpunkt haben sich die Daten geändert und Sie werden eine Seite mit Daten verpassen.
Das bedeutet, dass Sie nur die Hälfte der Einträge bearbeiten und die Hälfte weglassen.
Lösung:
Sie können die chunkById-Methode nach Laravel 5.2 verwenden
Sie können sich vor Laravel 5.2 auf den folgenden Code beziehen
while(User::where('approved', 0)->count() > 0) { User::where('approved', 0)->chunk(100, function ($users) { foreach ($users as $user) { $user->update(['approved' => 1]); } }); }
[Verwandte Empfehlungen: Laravel-Video-Tutorial]
Das obige ist der detaillierte Inhalt vonSo verwenden Sie die Chunk-Methode von Laravel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!