rollerworks/search-bundle
Symfony bundle integrating Rollerworks Search: build user-friendly search forms, parse complex query strings, and translate them into Doctrine ORM/DBAL queries with reusable field definitions, validation, and extensible conditions.
Architecture fit
rollerworks/search-bundle is a Symfony bundle, not a Laravel package. Its value is concentrated in Symfony-specific integration: DI extension/config tree, SearchFieldSet/FieldSet configuration, form types (SearchFieldSetType, SearchFormType), request-to-condition wiring, and a Twig-rendered search form. Laravel has no equivalent bundle/host layer, so roughly the entire integration surface is unusable off-the-shelf.rollerworks/search core library: it parses a user-supplied query string into a normalized SearchCondition object, validated against a declared field set (field names, types, patterns, allowed values), then delegates translation to a backend ("condition optimizer/processor") such as Doctrine DBAL/ORM.Integration feasibility
laravel/framework ^10/^11 and its Symfony 6/7 components will produce conflicts or force --ignore-platform-reqs-style hacks that we should not accept.fetchAll(), Connection::query() semantics, and various type APIs changed.Serializable implementations, dynamic properties, each()-era helpers), and upgrade the Doctrine translation layer to DBAL 3/ORM 3. That is genuine engineering effort with ongoing ownership — not a dependency install.!/- negation, sub-groups) and the parser's edge cases.Technical risk
Key questions
field:value AND (a OR b)), or would structured filter UI + validated request parameters suffice? The former justifies a parser; the latter does not.SearchRequest/filter DTO) we'd need to interoperate with, and who owns that contract?Stack fit
rollerworks/search (and optionally rollerworks/search-doctrine-dbal), wired manually into a Laravel service provider.SearchFieldSetRegistry and a ConditionToQueryBuilder adapter as singletons; register field sets per domain model in a config file (config/search.php) rather than Symfony YAML.Migration path
rollerworks/search replacement name, pin via a Composer VCS/path repository, patch PHP 8.2/8.3 and DBAL/ORM compatibility, and expose only our own SearchService interface to application code. Application code never references Rollerworks\ namespaces directly.composer require of the Symfony bundle in any Laravel application.Compatibility
LIKE case sensitivity on Postgres vs MySQL, ILIKE handling).ReflectionParameter::getClass() removal, Serializable deprecation, strlen(null)-style warnings). These are mechanical but numerous; budget for a static-analysis pass (PHPStan level 6+) as the exit criterion.Sequencing
SearchService contract, ship to one low-risk read-only listing endpoint behind a feature flag, measure query latency and error rates.Maintenance
Support
Scaling
LIKE '%x%', OR-heavy clause trees, deep pagination offsets). The library does not protect against this; we must add clause-count caps, mandatory pagination limits, and query timeouts at the adapter layer.Failure modes
NULL ordering), causing inconsistent UX across environments.Ramp-up
How can I help you explore Laravel packages today?