Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Filterable Package Laravel Package

devaction-labs/filterable-package

A Laravel package for adding reusable, query-string-driven filtering to Eloquent models. Define the filters a model allows once, then let incoming requests narrow results cleanly, keeping controllers lean, queries readable, and filtering behavior easy to test.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. devaction-labs/filterable-package is a Laravel-side concern: it occupies the request-to-query boundary, most likely exposing a trait or interface applied to Eloquent models plus a set of filter classes resolved through the service container. That is the right layer for it — it sits below controllers and above the query builder, so it does not constrain our HTTP or domain layers and can be adopted per-model rather than per-application. Fit is good for read-heavy index endpoints that currently hand-roll $request->has(...) conditionals in controllers. Fit is poor where query shaping is already centralised in dedicated query objects or repositories, since we would end up with two competing abstractions.

Integration feasibility. Standard Composer install with Laravel package auto-discovery; expect a publishable config file and no database migrations. No host application code changes are required to install, only opt-in trait usage on selected models. This is a low-ceremony, reversible integration.

Technical risk. v2.4.0 contains no feature work, no deprecations, and no documented breaking changes — the changelog is two Dependabot commits bumping guzzlehttp/guzzle from 7.14.2 → 7.15.1 → 7.15.2. The risk profile of the release itself is therefore minimal: patch-level transitive dependency movement, no public API surface change. Two residual risks remain and both predate this release:

  1. An HTTP client in a filtering package is an architectural smell. Guzzle is a runtime dependency of a package whose stated job is query filtering. That implies either an optional remote filter/validation call, or an unpruned dev dependency. Either way it inflates our dependency graph and attack surface for no filtering benefit. This should be confirmed before adoption, not inferred from the changelog.
  2. Semver hygiene. A minor version bump (2.3.0 → 2.4.0) driven purely by dependency patches means the project does not distinguish "code changed" from "lockfile moved." We cannot use version numbers as a proxy for behavioural change, so change review must be diff-based.

Key questions.

  • Why does a query-filtering library require Guzzle at runtime? Is it an optional code path we can avoid, or a hard dependency?
  • Do the Guzzle bumps alter any transitive constraint we already pin (symfony, psr/http-client)?
  • What Laravel and PHP versions are supported, and is that matrix tested in CI?
  • Is there a documented filter-resolution pipeline (ordered filters, default filters, authorisation hooks), or is behaviour implicit in trait magic?
  • Are filters validated against an allowlist, or can a request parameter reach an arbitrary column/relation?
  • Who maintains the package — is devaction-labs an internal team or a third party with a support commitment?
  • What is the tag-to-release cadence and is there a security disclosure process?

Integration Approach

Stack fit. Assumes a conventional Laravel application (service provider, facade-free container resolution, Eloquent). It will slot in without touching routing, middleware, or the persistence layer. Any deviation from that — Lumen, a non-Eloquent read model, or a CQRS-style query bus — reduces the value proposition substantially.

Migration path. Adopt incrementally rather than wholesale. Pick one high-traffic index endpoint, express its existing filters as package filter classes, and keep the existing controller code path behind a feature flag for one release cycle so behaviour can be diffed against production traffic. Do not attempt to convert all models at once; the failure mode of a partial migration is inconsistent filtering semantics across endpoints, which is a correctness issue, not a cosmetic one.

Compatibility. Verify the supported-version matrix against our current Laravel and PHP baselines before committing. Because 2.4.0 only moved Guzzle, compatibility with 2.3.0 is expected to be identical — but that is an expectation, not a verified fact, and should be confirmed by running our own test suite against both tags rather than trusting the changelog.

Sequencing.

  1. Dependency audit: confirm whether Guzzle is a runtime or dev dependency and whether it is reachable from the filter code path.
  2. Run our existing integration suite against 2.4.0 on a branch; compare against 2.3.0.
  3. Pilot on one endpoint behind a flag; instrument query counts and response parity.
  4. Ratify a filtering convention (naming, allowlisting, default sort) before widening adoption — this is the decision that actually determines long-term cost.
  5. Expand model-by-model, deprecating hand-rolled filter code as each endpoint is proven.

Operational Impact

Maintenance. Low and largely passive. The package is a thin abstraction and this release requires no application-side action beyond a routine composer update. The real maintenance cost is governance: someone must own the filtering convention and review which filters are permitted, otherwise the filter set accretes organically and becomes an undocumented public API.

Support. Uncertain. devaction-labs is not a widely recognised vendor, and the changelog shows automated dependency management rather than active feature development. Assume no SLA and plan for the possibility that we are the maintainers of last resort. Mitigate by keeping our filter definitions in application code (so they are portable) rather than deep in package-specific configuration, and by budgeting for a fork or vendored patch if the project stalls.

Scaling. Filtering is applied at query-construction time, so cost scales with the underlying query, not the package. The scaling risks are the familiar ones: unbounded filter combinations producing unindexed WHERE clauses, and N+1 behaviour if filters traverse relations. Establish a policy that every filterable column is indexed and that relation filters are constrained to eager-loaded paths. Neither risk is introduced or resolved by 2.4.0.

Failure modes.

  • Silent mis-filtering — a filter name accepted but ignored, returning a broader result set than intended. Most dangerous failure mode for anything with access-control or reporting semantics.
  • Parameter injection into query structure — if filter keys map to arbitrary columns or relations without an allowlist, a request can probe schema.
  • Container resolution error — misconfigured filter namespaces surface as runtime exceptions at request time rather than at boot; add a boot-time or test-time assertion that all declared filters resolve.
  • Dependency drift — the Guzzle bump is harmless in isolation, but an unmonitored transitive graph in a low-attention package is exactly where a compromised or yanked release hides. Keep it in the dependency scanner's scope and pin via lockfile.

Ramp-up. A developer familiar with Laravel can be productive in under a day: the mental model is small and the integration surface is one trait plus a set of small classes. The cost is not learning the package, it is learning our filtering convention — which we should write down as part of the pilot, not afterwards.

Assessment of v2.4.0 specifically. Non-eventful. Two automated dependency bumps, no API change, no deprecation, no migration action. It does not change the adoption calculus in either direction; it does slightly reinforce the observation that this project's release signal is weak and its dependency posture is worth a direct question before we commit.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
robertmarney/lara-hierarchial-collections
simonschaufi/rule-doc-generator
emissaoja/emissaoja
blackbricksoftware/gravityforms-civicrm-form-processor
al-rahabi/fancy-crud
jinas/dhivatar-component
mltstephane/laravel-quality
bernskiold/laravel-talentlms
bernskioldmedia/laravel-form-architect
youbar/easy-crud
c-point-labs/laravel-hostyourai
dbravoan/dbcms-admin-theme-dbcms
dbravoan/dbcms-theme-db-cyber
dbravoan/dbcms-blocks-basic
dbravoan/dbcms-module-content-audit
dbravoan/dbcms-module-ai-assistant
paygate-to/paygate-php
padosoft/askmydocs-connector-base
defstudio/supercharged-carbon
bernskioldmedia/laravel-matomo