Podczas gdy Może to być właściwe Czy czuję, że mój kod jest bardzo zły.

Prowadzę moją aplikację Lavel 6.x w kontenerze Docker. Podczas uruchamiania poniższego kodu

Dozwolony rozmiar pamięci ** bajty wyczerpane (próbowałem przydzielić 8192 bajtów)

Bez względu na to, jak wysoki ustawia memory_limit, to ten sam błąd (z nowym limitem). Więc chcę przejrzeć mój kod:

// I'm running a seeder.
$arr = [1,2,3,4,5,.....];

// Get all users and update a column:
$users = Users:all();

// Loop and update (we have thousands 😢)
foreach ($users as $user) {
  $index = array_rand($arr);
  $user->someColumn = $arr[$index];
  $user->save();
}
// Another loop for another model with same as above.....

To powoduje problem "dozwolony pamięć". Czy istnieje lepszy sposób na to, aby to osiągnąć?

0
Sylar 17 lipiec 2020, 10:57

1 odpowiedź

Najlepsza odpowiedź

Zamiast pobierać wszystkich użytkowników jednocześnie, fetch {X0}} użytkownicy

\App\User::chunk(10, function ($users) use ($arr) {
    foreach ($users as $user) {
        $index = array_rand($arr);
        $user->someColumn = $arr[$index];
        $user->save();
    }
});
2
linktoahref 17 lipiec 2020, 08:09