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.
eloquent-param-limit-fix and laravel-adjacency-list. For any roadmap item blocked by a Laravel 13 upgrade in a product that stores hierarchical data — category trees, org charts, threaded comments, nested navigation, BOM/parts structures — this package is a named prerequisite. Without it, Composer resolution fails; with it, the blocker disappears. Treat it as a line item on the upgrade train, not a feature.kalnoy/nestedset), closure tables, or materialized paths. If that call is already made, the bridge is the natural consequence. If it is still open, a PM should ask why this package is in the dependency graph at all — it silently answers a schema question that deserves an explicit owner.eloquent-param-limit-fix exists because SQLite (~999 bind parameters) and SQL Server (2,100) break on large whereIn sets, while MySQL/Postgres have far more generous ceilings. "Runs anywhere" — SQLite for local dev and CI, Postgres or MySQL in production, SQL Server in enterprise — is a promise this package helps keep specifically for tree queries. A PM who has committed to that promise should know this is part of the mechanism.whereDescendantOfMany() over thousands of IDs viable without hand-tuned batching or denormalization. But understand the trade: it converts a hard failure into additional round trips, so query count and latency grow roughly linearly with chunk count. Instrument tree endpoints for query volume, not just correctness — the fix can mask a design that should be batched or denormalized upstream.Consider it when:
staudenmeir/laravel-adjacency-list and staudenmeir/eloquent-param-limit-fix in the same application, and tree queries throw parameter-limit or binding-count errors. The bridge is load-bearing only under that conjunction.composer require; no service provider, no migrations, no config publishing). Verify the trait swap — replacing HasAdjacencyList with the bridge's exported trait is the entire integration surface.Look elsewhere when:
whereIn cardinality stays well under engine ceilings (roughly <999 on older SQLite; tens of thousands on MySQL/Postgres depending on configuration). Benchmark the largest tree per driver before assuming the fix is load-bearing.Constraint hygiene. The bridge must stay version-aligned with both parents. Treat laravel-adjacency-list, eloquent-param-limit-fix, and this bridge as a single upgrade unit, resolve them together (composer update <bridge> <adjacency-list> <param-limit-fix> -W) to avoid partial-upgrade dead-ends, and confirm supported ranges in composer.json rather than relying on release notes. Introducing a fourth staudenmeir package can render resolution unsatisfiable. Two questions to get answered before sign-off: does v1.4 widen the upstream constraints (safe) or pin them to a specific parent pair (forces lockstep upgrades), and do we actually have a tree query that crosses a parameter ceiling today?
To executives: This is a low-risk, low-cost compatibility update. It changes no product behavior — it keeps an existing internal capability (hierarchical data such as category trees, org structures, and comment threads) working on the newest Laravel version. Its practical value is unblocking the Laravel 13 upgrade for any module that stores tree-shaped data. Cost and risk are both negligible. The only notable consideration is that maintenance sits with a single upstream maintainer, which is acceptable at this scope and mitigable by forking a one-class shim. Fund it as maintenance, not as a feature.
To engineering: v1.4 adds Laravel 13 support to the bridge that lets eloquent-param-limit-fix and laravel-adjacency-list coexist. Without it, adjacency-list's custom query builder bypasses the parameter-chunking traits, so deep- or wide-tree queries can exceed placeholder limits — typically surfacing as binding-count errors on SQLite in CI and on large whereIn sets on SQL Server. Action items: inventory which services import adjacency-list and on which drivers; confirm the ceiling is actually reachable (staging test with >999 nodes on SQLite); include the bridge in the Laravel 13 upgrade train and bump it together with both parent packages; verify the resolved version ranges in composer.json; and monitor query volume on tree endpoints, since the fix trades a hard failure for additional round trips. No application code changes are required beyond the trait swap, if that has not already been done.
To the product/roadmap audience: Treat the triple (bridge + both parents) as one line item. Patch-level from v1.3 to v1.4, zero application changes, re-run the tree-query tests. Prove the limit is reachable before committing to this as a production dependency — otherwise call it what it is: test-fidelity insurance. And name it as a prerequisite in the same release train as the Laravel 13 upgrade, so the upgrade does not stall on an unowned dependency.
How can I help you explore Laravel packages today?