atldays/laravel-sculptor
Laravel Sculptor is a code-generation toolkit that sculpts Eloquent models, migrations, factories and seeders from your database schema or a simple definition, delivering clean scaffolding in seconds so you can focus on features instead of boilerplate.
Query, CachedQuery, and BuilderCachedQuery are now the canonical presets, and the removed legacy traits consolidate the API into three choices.#[ForModel], #[Select], #[WithRelations], #[Limit]) with inheritance moves query metadata out of scattered method bodies and into declarative, reviewable class headers. That is a consistency and code-review decision as much as a technical one.CachedQuery gives result-level caching through Laravel's cache; BuilderCachedQuery integrates with atldays/laravel-eloquent-query-cache. For read-heavy endpoints (catalogs, dashboards, public APIs) this can defer infrastructure work rather than trigger it — a roadmap-sequencing input.paginate() shortcut, changed default page size). That informs a decision to adopt in a bounded module first, pin the version, and avoid spreading it platform-wide until the API stabilizes.Adopt when:
Look elsewhere when:
paginate(perPage:, page:) shortcut or the legacy HasQueryWith* traits in many call sites. The upgrade is mechanical (make()->perPage()->page()->effect(), traits → presets) but volume matters — scope it before committing.perPage(15) explicitly or set the model's $perPage. Audit any client that assumed the old page size before upgrading.To executives: This is a developer-velocity dependency for our Laravel query layer, not a customer-facing feature. It replaces hand-written, inconsistent query code with a small set of standardized presets and adds optional caching at the query level, which lets us speed up read-heavy screens without new infrastructure. The cost is a contained upgrade cycle: v2.0.0 requires Laravel 12/13, so it is only viable alongside a framework upgrade we would need to schedule anyway for security support. Risk is moderate and bounded — the package is young and shipped breaking changes in this release, so we would adopt it in one module first, pin the version, and expand only after a clean cycle.
To engineering: v2.0.0 is a cleanup release that makes the package more predictable. Query metadata is now declarative via PHP attributes (#[ForModel], #[Select], #[WithRelations], #[Limit]) with inheritance support, so configuration is shared and reviewable instead of copy-pasted. The API narrows to three presets — Query, CachedQuery (Laravel cache, result-level), and BuilderCachedQuery (via atldays/laravel-eloquent-query-cache). Internals for caching are simplified and deduplicated, and builder-cache now validates eager-loaded relations, which should reduce N+1 surprises. Pagination aligns with Laravel's native defaults and adds stricter validation, so no more hidden 15-per-page magic. Breaking changes are limited and documented: Laravel 10/11 dropped, QueryResultPaginated::paginate() removed, legacy HasQueryWith* traits and CacheAttributeProvider removed. Migration is three steps — swap paginate() for make()->perPage()->page()->effect(), move legacy traits to the presets, and set perPage explicitly anywhere the old default mattered.
How can I help you explore Laravel packages today?