Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie die Chunk-Methode von Laravel

So verwenden Sie die Chunk-Methode von Laravel

WBOY
WBOYOriginal
2022-06-06 15:12:555440Durchsuche

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.

So verwenden Sie die Chunk-Methode von Laravel

Die Betriebsumgebung dieses Artikels: Windows 10-System, Laravel Version 6, Dell G3-Computer.

So verwenden Sie die Chunk-Methode von Laravel

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn