staudenmeir/eloquent-param-limit-fix-x-laravel-adjacency-list
Bridge package that lets staudenmeir/laravel-adjacency-list work with the eloquent-param-limit-fix, avoiding database parameter limits when recursive adjacency list queries generate large numbers of bindings.
What this package is, from a planning standpoint. staudenmeir/eloquent-param-limit-fix-x-laravel-adjacency-list is not a feature package; it is a compatibility bridge (an "x" metapackage) that lets two sibling packages coexist: laravel-adjacency-list (recursive-CTE queries over hierarchical Eloquent models) and eloquent-param-limit-fix (transparent chunking of large whereIn/binding sets to stay under driver parameter ceilings). Without the bridge, adjacency-list's custom query-builder path bypasses the chunking traits, so deep or wide tree queries can blow past placeholder limits — typically surfacing as too many SQL variables on SQLite (~999 bind params) or the 2,100-parameter error on SQL Server. The v1.4 release is one substantive change: Laravel 13 support (PR #4). No customer-visible capability is added. A TPM should therefore treat this as an upgrade-gating dependency, not a roadmap item.
Architecture fit. Adoption is justified only under two conjunctive conditions: (a) the application already uses laravel-adjacency-list as its hierarchy representation, and (b) it runs on a parameter-constrained driver (SQLite in dev/CI/edge, SQL Server in enterprise) or has trees deep/wide enough to approach ceilings even on MySQL/Postgres. If either fails, the bridge is dead weight. More importantly, adopting it is an implicit architectural commitment: adjacency-list queried via recursive CTEs is our tree strategy. That decision belongs to whoever owns the schema — a TPM's job is to surface it explicitly rather than let it be inherited accidentally through a composer require. If the org has standardized on nested sets (kalnoy/nestedset), closure tables, or materialized paths, this package should not appear in the dependency graph at all, and its presence is a signal to ask why.
Integration feasibility. High, bordering on trivial. composer require plus swapping HasAdjacencyList for the bridge's exported trait on hierarchical models is essentially the entire integration surface: no service provider, no migrations, no publishable config, no assets. Nearly all effort is dependency resolution and verification, not engineering. That is unusual and worth stating plainly to stakeholders — it makes the package cheap to adopt and equally easy to forget during a framework upgrade, which is precisely where the risk lives.
Technical risk.
| Risk | Severity | TPM-relevant notes |
|---|---|---|
| Version-matrix coupling | High | Bridge + both parents + Laravel + PHP must align; bridge versions are not 1:1 with Laravel majors (v1.3→v1.4 is the Laravel 13 step). Own it as a matrix, not a package. |
| Single-maintainer concentration | Med-High | One author owns all three packages; bus factor 1 across the whole family. Mitigation is a cheap fork (roughly a one-class shim), but that must be a documented option, not an incident-time improvisation. |
| Combinatorial resolution dead-ends | Medium | The package name encodes exactly two parents; introducing a third staudenmeir package can render resolution unsatisfiable. Constrain the dependency graph deliberately. |
| Silent behavioral drift | Medium | The shim is thin; correctness is inherited from upstream majors, so a loose constraint can resolve an unpatched pair. Verify resolved versions in the lockfile, not release notes. |
| Framework-upgrade risk | Medium | The hazard carrier is Laravel 13 itself; this shim is the enabler. Budget the risk against the framework bump, not against the shim. |
| Low adoption signal (11 stars, 0 dependents) | Low-Medium | Not a quality signal for a bridge this narrow, but it does mean thin community validation of edge cases; your own regression suite is the real safety net. |
Assessment of v1.4 specifically. Additive and non-breaking: one PR widening the framework constraint. No API, config, or migration changes. It is a patch-level bump requiring matrix re-verification and a tree-query regression pass — not a code review.
Key questions a TPM must get answered before sign-off.
composer.json; do not infer from release notes.Stack fit. Laravel through 13, Eloquent, with SQLite and SQL Server as the drivers that motivate the package and MySQL/Postgres as benign passengers. It drops into a standard Laravel service without exposing framework extension points or container bindings to application code — which is why it is cheap to adopt and easy to overlook in upgrade planning. From a TPM lens: low integration cost means the decision cost dominates, so spend the effort on the dependency-policy call, not on an implementation plan.
Migration path.
composer update <bridge> <adjacency-list> <param-limit-fix> -W — to avoid the partial-upgrade dead-end where the bridge is current but a parent is not.Compatibility to confirm from composer.json at v1.4 — verify, do not assume:
| Component | What to check |
|---|---|
laravel/framework |
^13.0 added; earlier majors still supported (safe widening) vs. dropped (forced migration) |
staudenmeir/laravel-adjacency-list |
Constraint range — pinned vs. open; whether the range admits the version we run today |
staudenmeir/eloquent-param-limit-fix |
Same; confirm the pair resolves together under our PHP floor |
php |
Minimum version implied by Laravel 13, matched against production and CI images |
| Trait export | Confirm the bridge's trait name and namespace; that swap is the only application-code change |
Sequencing (the part a TPM actually controls).
laravel-adjacency-list and on which drivers. Services not using it are out of scope entirely.whereIn set on SQL Server). If the ceiling is not reachable, downgrade the item to test-fidelity insurance and stop treating it as production infrastructure.Maintenance. This is recurring compatibility debt, not a feature investment. Track it as a standing line item on every Laravel major and every upstream-major release; budget a dependency-matrix review, not a named owner. Because the bridge must stay version-aligned with both parents, the maintenance artifact to keep current is a compatibility matrix (bridge × adjacency-list × param-limit-fix × Laravel × PHP), reviewed on a cadence and at every major. The realistic contingency — vendoring or forking — is cheap because the shim is roughly one class; formalize that as a documented option with an owner.
Support. There is no vendor, SLA, or security-review artifact: single-maintainer, community-supported, MIT. Escalation paths are effectively "open an issue" and "fork it." For a package of this scope that is acceptable, but a TPM should set expectations accordingly and ensure the fork path is staffed, not theoretical. Expect releases that track upstream majors and little else; do not plan around a feature roadmap.
Scaling. The package's core trade is important to state accurately to stakeholders: it converts a hard failure into additional round trips. Query count and latency grow roughly linearly with chunk count, so deep or wide trees get slower but keep working. Instrumentation should therefore watch query volume on tree endpoints, not just correctness — a dashboard that only shows HTTP latency will miss a 40-query tree render that used to be 3. Watch specifically for the fix masking a design problem: if an endpoint's query count climbs release over release, the right answer is batching, denormalization, or caching upstream, not more chunking. Set a query-count budget per tree endpoint and treat breaches as product-level regressions.
Failure modes to plan for.
composer update ... -W.Ramp-up. Near-zero for anyone comfortable with Eloquent: composer require, swap the trait on hierarchical models, run existing tree tests. The real onboarding cost is organizational, not technical — teaching the team that this package is part of the Laravel-major upgrade checklist and that the four staudenmeir-family versions move together. A half-page runbook (matrix, update command, regression test command, fork contingency) is sufficient; anything longer is over-documenting a one-class shim.
Bottom line for a TPM. Fund it as maintenance, name it as a prerequisite on the Laravel 13 upgrade for any module storing tree-shaped data, prove the parameter ceiling is reachable before calling it production-critical, and instrument tree endpoints for query volume so the fix doesn't quietly become the problem.
How can I help you explore Laravel packages today?