option('chunk'); $updated = 0; // We want small transactions per chunk to avoid long locks User::query()->orderBy('id') ->chunkById($chunk, function ($users) use (&$updated) { DB::transaction(function () use ($users, &$updated) { foreach ($users as $u) { // Read via casts (plaintext) and assign back to trigger normalization $email = $u->email; $username = $u->username; $dirty = false; if ($email !== null) { $u->email = $email; $dirty = true; } if ($username !== null) { $u->username = $username; $dirty = true; } if ($dirty) { $u->saveQuietly(); $updated++; } } }); }); $this->info("Users normalized: {$updated}"); $this->info('Tip: Remove APP_PREVIOUS_KEYS after normalization if keys are unified.'); return self::SUCCESS; } }