michael-rubel/laravel-model-mapper
A Laravel package for mapping Eloquent models to custom classes such as DTOs and resources. Define model-to-class mappings, transform attributes and relationships, and keep application layers decoupled with clean, configurable model mapping.
Architecture fit. Unchanged, and unchanged for a structural reason: this release adds no functionality. 3.4.3 is a dependency-constraint bump that widens framework compatibility; the package remains a flat collection of global helper functions with no domain, persistence, or transport surface. It is still a code snippet decision priced in hours. A release that adds zero functions does not move the value ceiling — the "N useful call sites" question from Gate 1 is untouched by this changelog.
Integration feasibility. Mechanically still trivial, and the release confirms the mechanism rather than the merit. Two material corrections to the prior assessment:
michael-rubel/laravel-loop-functions. The composer.json name is still unverified, so the laravel-model-mapper / laravel-loop-functions discrepancy stands. Resolving it is still Gate 0.Technical risk. Still high, but the composition of the risk has shifted — that is the actual finding here.
Key questions.
composer.json now declare laravel-loop-functions, and what is the exact require block for php and illuminate/support at tag 3.4.3? Is Laravel 11/12 supported, and if not, is there an open or merged PR?helpers.php.TPM recommendation: unchanged — vendor the functions, do not adopt the dependency. The release removes the strongest single argument (abandonment) while leaving every other argument intact, and it supplies new evidence for the recommendation: the constraint conflict we predicted has already occurred once and was resolved by an unpaid contributor. A dependency that requires a stranger's pull request to survive each framework major is not a dependency; it is a deferred fork. Copy the functions we want into app/Support under MIT with attribution and a pinned commit SHA, keep our tests, and own it explicitly. The value ceiling did not move this release.
Stack fit. Nominally improved: the support ceiling moved from Laravel 9 to Laravel 10. Confirm whether that reaches our runtime; if we are on 11 or 12, this release does not make the package installable and the evaluation stalls at the same place. The conventions test from before still governs: if our lint rules discourage root-namespace helpers, adopting this buys a code-review argument per call site.
Migration path. The two-way path remains short and the recommendation is unchanged:
composer require tag 3.4.3 in a throwaway sandbox, dump the autoloaded functions, diff against app/Support.Compatibility. Better than previously stated and still unverified. The constraint conflict that blocked Laravel 10 is resolved as of 3.4.3; it was not resolved for 3.4.2. So: pin 3.4.3 or later, never ^3.4.0, and never --ignore-platform-reqs. Run with E_ALL to surface deprecations, and check function_exists guards against our existing helper packages. "Installs cleanly" remains necessary and insufficient — the next framework major is the same coin-flip, and this time we have seen the coin.
Sequencing.
composer.json name, confirm the 3.4.3 release date, and confirm archived status today. Do not proceed on the old "archived" premise — it is now known to be at least partly wrong.Still a 1–3 day investigation. Do not parallelise with a feature deadline, and do not reopen it on the strength of a patch release.
Maintenance. The prior claim — "permanent and ours either way" — needs one amendment: it is now contingent, not certain. There is a live maintainer-adjacent channel, evidenced by a merged PR. But a channel that responds when a volunteer shows up is not an SLA. Plan for ownership to be ours, and treat any upstream patch as a bonus. The asymmetry still favours vendoring: it makes the obligation visible in code review rather than hiding it behind a composer.json line nobody re-reads until a framework major forces the issue.
Support. Effectively none, with one demonstrated exception. No advisories, no triage, no upgrade guidance, no published response commitment. The 3.4.3 precedent shows a fix can arrive; it does not show it will arrive before our upgrade window closes. The on-call runbook must still assume first-touch diagnosis by whoever read the source at Gate 1.
Scaling. No runtime dimension — in-process helpers. The organisational concern is unchanged and slightly sharpened: a package that is easy to call everywhere becomes load-bearing by accident, and its ease of adoption is now marginally higher (it installs on L10). Cap adoption deliberately and prefer greppable, namespaced wrappers.
Failure modes.
cannot redeclare at boot, only in the environment where both packages load. Unchanged.Ramp-up. Unchanged in both directions: trivial to use, expensive to safely retire, no docs, no changelog beyond an auto-generated compare link, and intent recoverable only by reading the body. This asymmetry remains the cleanest argument for holding the code ourselves — in a vendored file the body sits in our repo with a comment explaining why it exists, which is exactly what a new engineer needs.
Bottom line for planning. Budget 1–3 engineer-days. First half-day is Gate 0: correct the archived finding, confirm the release date and current composer.json, and confirm the runtime ceiling. Expect the outcome to be unchanged — vendor a handful of functions under MIT with attribution and close. The 3.4.3 release is a reason to re-verify our facts, not a reason to adopt.
How can I help you explore Laravel packages today?