iksaku/laravel-mass-update
Laravel Mass Update lets you update multiple Eloquent records with different values in a single SQL query. Instead of looping through models, pass an array of updates and let the package generate efficient CASE-based UPDATE statements for faster bulk edits.
UPDATE ... CASE WHEN statement instead of N round trips. This is the package's core value and the main reason to adopt it.Model::upsert() covers insert-or-update; this package covers update-only. Choosing between them is a product decision about semantics (do unknown keys get created?) and driver support, not a matter of capability.Mode::massUpdateQuietly() is gone in 2.0.0. Any code path using it must move to Model::withoutTimestamps(). This should be scoped as a line item in the same sprint/PR as the Laravel 13 bump, not as an independent project. If the platform upgrade is not imminent, pinning ^1.0 is a legitimate "decide later" — but put the migration on the roadmap so it doesn't surface as unplanned work.Adopt when:
save()/update() calls.Look elsewhere when:
->update(['status' => 'archived'])). Native Eloquent, no dependency needed.Model::upsert() is native, well understood, and covers the common sync case.Timestamps caveat worth flagging before adoption: because updates go through the query builder, updated_at handling is explicit rather than automatic. Confirm during evaluation whether you want withoutTimestamps() or an explicitly set updated_at in the payload, and test that behavior — it is the single most common source of "why didn't this row's timestamp change" bugs in this pattern.
For executives (one paragraph): This is a small, free, open-source library that turns "update 50,000 rows with 50,000 different values" from 50,000 database queries into one. That means faster bulk operations in the admin and sync paths, fewer timeouts and retries, and less load on the database — infrastructure savings with no licensing cost and no vendor commitment. The 2.0.0 release adds support for the next Laravel version and removes a custom helper in favor of a built-in framework method, which is a good sign: the maintainer is shrinking the surface area rather than growing it, which lowers long-term risk. The upgrade cost is one method call to replace. The main risk is that the package has a very small maintainer base; it is mitigated by a narrow API that our team could reimplement internally in roughly a day if the project were ever abandoned.
For engineering (the actual ask):
Mode::massUpdateQuietly() is removed. Replace with Model::withoutTimestamps() per the Laravel docs (laravel.com/docs/11.x/eloquent#timestamps). This is a mechanical, greppable change — search for massUpdateQuietly and expect a small diff.^1.0; nothing in 2.0.0 is a feature we need today.updated_at behavior after the migration — the helper that disappeared was the thing implicitly controlling timestamps in quiet mode, so that is the regression risk, not the update logic itself.upsert(). And do not use it where per-row observers or audit logging are required — it bypasses model events by design.How can I help you explore Laravel packages today?