juniora/nova-range-input-filter
Adds a range filter to Laravel Nova resource indexes, letting users narrow records by a numeric or date range through min and max inputs. Drop it into your filters array to filter listings by price, quantity, dates, and similar range-based columns.
Architecture fit
Laravel\Nova\Filters\Filter subclasses registered via a resource's filters() method). It adds no models, migrations, service providers with side effects, or middleware — so architectural coupling is minimal.Integration feasibility
composer require juniora/nova-range-input-filter, add the class to filters(), publish/recompile Nova assets if the Vue component is not prebuilt.Technical risk
filters query-string parameter and are passed into apply(Request $request, $query, $value). If the implementation interpolates min/max into whereRaw rather than using bound parameters or whereBetween, crafted URLs yield SQL injection on an admin surface. Must be code-reviewed before any deployment.JunioraTeam), no evidence of CI, test suite, security policy, or issue triage. This is the dominant risk, not the code.whereBetween behaves differently across MySQL/Postgres/SQLite for dates and for numeric columns stored as strings; behavior with an open-ended range (only min, or only max) is unverified.Key questions
composer.json? What does composer why-not say against our pinned Nova?apply() use parameter binding, or string interpolation into whereRaw?Stack fit
Migration path
filters() array plus an asset republish; no user data is affected. Users with bookmarked URLs containing the filter param will simply see it ignored.Compatibility
composer.lock. Third-party Nova extensions have a habit of breaking on Nova minor bumps; an unpinned constraint will surface that breakage during unrelated deploys.Sequencing
apply() and the Vue component for binding and validation (0.5 day) — gate for security sign-off.Recommendation on path: given zero community validation and the small scope, the defensible options are (a) build a ~60-line internal filter and own it outright, or (b) fork this repo into an internal namespace and treat it as first-party code. Consuming it as an unpinned third-party dependency is the weakest of the three.
Maintenance
Support
Scaling
whereBetween against an unindexed column becomes a full table scan and will degrade the admin panel precisely when datasets grow.EXPLAIN on production-shaped data during the spike.Failure modes
| Failure | Symptom | Detection |
|---|---|---|
| Nova upgrade breaks Vue component | Filter renders blank or index page errors | Post-upgrade smoke test |
| Assets not published in deploy | Filter UI missing for all users | Staging deploy check |
| Unvalidated input | 500 on malformed filters param |
Error monitoring |
| Injection via crafted URL | Silent data exfil / corruption on admin surface | Code review pre-adoption only |
| Unindexed range query | Index page timeout at scale | Query plan review, APM latency |
The last two are the ones that justify gating adoption on review rather than shipping on the strength of "it's a small filter."
Ramp-up
How can I help you explore Laravel packages today?