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

Filtration Bundle Laravel Package

ite/filtration-bundle

ITE FiltrationBundle is a Symfony bundle that adds configurable filtering to Doctrine entity queries. Define text, choice, date, boolean, and relation filters, then apply them to query builders to build dynamic search forms and listings with minimal setup.

View on GitHub
Deep Wiki
Context7

Product Decisions This Supports

  • Sizing list/filter/sort/paginate features honestly. Nearly every roadmap item that ships a "table with filters" — admin consoles, ops dashboards, customer search results, export builders — depends on this capability. The gap between the opportunity score (19.99) and the package score (0.035) captures the real insight: the problem is worth a planned investment; this artifact is not the solution. That distinction lets a PM scope the work correctly instead of treating it as a free dependency.
  • Making the build-vs-borrow call deliberate. The package's true value is as a reference design, not a dependency. It shows the shape of a reusable filter contract — declarative filter definitions applied uniformly to in-memory collections (ArrayCollection) and to database queries (QueryBuilder). That's an architecture decision worth making on purpose rather than letting each team hand-roll if ($request->has('status')) chains in controllers.
  • Treating filter consistency as a product decision. A shared filtering vocabulary means uniform parameter names, filter semantics, and pagination behavior across screens. Inconsistent filtering generates support tickets and erodes trust in search results — this is a UX and support-cost question, not just code style.
  • Sequencing platform investment with a visible payoff. Because the design targets the persistence layer rather than HTTP, it forces an explicit choice about where filtering lives: domain/query layer (reusable by API, admin, CLI, exports) versus controllers (fast now, duplicated forever). PMs should schedule this as a platform line item with a concrete downstream velocity benefit.
  • Triaging inherited code. If this surfaces in a dependency audit or an acquired codebase, the answer is immediate: no downstream users, no maintenance signal, a stack mismatch. That is a migration ticket, not a keep decision.

Caveat to state in any write-up: despite being framed here as a Laravel package, this is a Symfony bundle built on Doctrine. It does not work in a Laravel/Eloquent codebase without a port. Every recommendation below assumes that mismatch.

When to Consider This Package

Adopt only under narrow conditions:

  • You are on Symfony + Doctrine (not Laravel) and need filtered, sorted, paginated listings over both ArrayCollection and QueryBuilder through one API. That dual-source capability is the genuinely interesting idea — in-memory for fast, database-free tests, database for production, identical filter definitions for both.
  • You need the pattern today and will vendor a fork. With 1 star and 0 dependents there is no community to absorb bugs, no security response process, and no compatibility guarantees across Symfony/Doctrine majors. Treat it as sample code you now own.
  • You're using it as a specification. Read the filter-definition model, extract the contract, implement it in-house. For a component this small, the "buy" cost is dominated by audit and upgrade risk, not by writing the code.

Look elsewhere — or build — when:

  • You are on Laravel. Use Eloquent query scopes or a Laravel-native filtering library (e.g., a whitelisted query-builder package). Do not bridge Doctrine in.
  • You need a published API filtering contract — operators, nested boolean logic, saved filters. Purpose-built ecosystem libraries cover more ground with active maintenance.
  • You need authorization-aware filtering — row-level visibility, tenant isolation. The package has no opinion here, and retrofitting security into a filter layer is exactly where these designs fail.
  • You require performance guarantees on large datasets. The dual-source abstraction invites accidental in-memory filtering that quietly loads whole tables.
  • Your maintenance budget is zero. Single maintainer, no dependents is a liability in any long-lived or regulated product.
  • You need a compatibility guarantee for current PHP 8.2+/Symfony majors — expect Composer to refuse install, and treat that failure as the decision.

How to Pitch It (Stakeholders)

To executives: We evaluated a small open-source component for filtering, sorting, and paginating data listings. The capability is real and recurring — it underpins admin tables, search results, and exports — but the package itself is unsuitable as a dependency: one star, zero downstream users, a single maintainer, no security process, and it targets Symfony/Doctrine rather than our stack. Recommendation: do not adopt; do capture the design. We'll build an equivalent internal component as part of planned list/filter work — roughly one to two engineer-weeks including tests — which removes third-party risk, gives us consistent filter behavior across screens, and creates a single place to enforce data-access rules and index coverage.

To engineering: Treat it as a reference, not a dependency. The transferable idea is a declarative filter definition applied identically to in-memory collections and to queries — that buys fast, database-free tests and one filtering vocabulary across API, admin, and exports. The non-transferable parts are the Symfony/Doctrine coupling and the absent maintenance. Build a thin internal abstraction: a FilterDefinition (field → type/operators/allowed), a ListQuery value object (filters, sorts, page), one adapter per persistence layer behind that contract, and pagination rendered as a JSON envelope in the API and a Blade component in the UI — no Twig coupling. Make two things non-negotiable from day one: a server-side allowlist for filter and sort field names (never trust client-supplied field names — that's the SQL-injection vector here), and one code path per endpoint so in-memory and database filtering never silently diverge. Push sort and pagination into the store, plan keyset pagination for large tables, and pair the field allowlist with an index review so exposing a filter doesn't turn into a full scan.

Bottom line: low adoption risk only if we own the code. The opportunity here is the pattern, not the package.

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.
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings
coleus/apps
seampact/laravel
emmyconceptng/laravel-ng-postcode
jjsquady/round-robin
skyraptor/chatter
edlugz/sasapay
abbasudo/artisan-route