PHPackages                             nebkam/odm-search-param - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. nebkam/odm-search-param

ActiveLibrary[Database &amp; ORM](/categories/database)

nebkam/odm-search-param
=======================

6.0.9(7mo ago)01.6k↓33.3%MITPHPPHP ^8.2CI passing

Since Jul 4Pushed 7mo agoCompare

[ Source](https://github.com/nebkam/odm-search-param)[ Packagist](https://packagist.org/packages/nebkam/odm-search-param)[ RSS](/packages/nebkam-odm-search-param/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (3)Versions (26)Used By (0)

[![Latest Stable Version](https://camo.githubusercontent.com/a5666b93a4db58a44a71c97088e25b04163e6d694c90d58ba300bb963fbf3fc9/68747470733a2f2f706f7365722e707567782e6f72672f6e65626b616d2f6f646d2d7365617263682d706172616d2f76)](//packagist.org/packages/nebkam/odm-search-param)[![Tests](https://github.com/nebkam/odm-search-param/actions/workflows/main.yml/badge.svg)](https://github.com/nebkam/odm-search-param/actions/workflows/main.yml)

ODM Search Param
================

[](#odm-search-param)

Rationale
---------

[](#rationale)

- you use [Doctrine MongoDB ODM](https://github.com/doctrine/mongodb-odm)
- you need some **search** functionality, that can be expressed through the `QueryBuilder` or the `MatchPhase` of the Aggregation Builder
- you have a class that holds the search parameters (i.e. a domain class in Symfony)
- you don't want to manually map the search parameters to builder statements

Usage
-----

[](#usage)

1. Search filter class can be any class with **public** properties
2. Properties should be marked with `#[SearchParam]` attribute
3. Use the `SearchParamParser::parse` with a `QueryBuilder|MatchStage` instance to build the query on

Examples
--------

[](#examples)

### Verbatim (`String` and `Bool` types)

[](#verbatim-string-and-bool-types)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::String)]
    public string $name;
}
```

Builds the query to:

```
$builder->field('name')->equals($propertyValue);
```

### Using different property names

[](#using-different-property-names)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::Exists, field: 'images')]
    public bool $hasImages;
}
```

Builds the query to:

```
$builder->field('images')->exists(true);
```

### Type casting (`Int` type)

[](#type-casting-int-type)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::Int)]
    public $age;
}
```

Builds the query to:

```
$builder->field('age')->equals((int) $propertyValue);
```

### Type casting with arrays (`IntArray` and `StringArray` types)

[](#type-casting-with-arrays-intarray-and-stringarray-types)

```
class SearchFilter
{
    /**
    * @var int[]
    */
    #[SearchParam(type: SearchParamType::IntArray)]
    public array $grades;
}
```

Builds the query to:

```
$builder->field('grades')->in($propertyValuesAllCastedToInt);
```

### Using backing values from enums (`StringEnum` and `IntEnum` types)

[](#using-backing-values-from-enums-stringenum-and-intenum-types)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::StringEnum)]
    public SideOfTheWorldEnum $sideOfTheWorld;
}
```

Builds the query to:

```
$builder->field('sideOfTheWorld')->equals($propertyValue->value);
```

### Using backing values from enum arrays (`StringEnumArray` and `IntEnumArray` types)

[](#using-backing-values-from-enum-arrays-stringenumarray-and-intenumarray-types)

```
class SearchFilter
{
    /**
    * @var SideOfTheWorldEnum[]
    */
    #[SearchParam(type: SearchParamType::StringEnumArray)]
    public array $sidesOfTheWorld;
}
```

Builds the query to:

```
$builder->field('sideOfTheWorld')->in($backingValuesOfPropertyValue);
```

### Querying by range (`RangeInt`, `RangeInt` and `RangeFloat` types)

[](#querying-by-range-rangeint-rangeint-and-rangefloat-types)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::RangeInt, direction: SearchParamDirection::From)]
    public int $price;
}
```

Builds the query to:

```
$builder->field('price')->gte((int) $propertyValue);
```

### Custom query building by specifying the callable

[](#custom-query-building-by-specifying-the-callable)

```
class SearchFilter
{
    #[SearchParam(type: SearchParamType::Callable, callable: [SomeClass::class, 'setStatus'])]
    public string $status;
}

class SomeClass
{
    public static function setStatus(Builder|MatchStage $builder, $value, $filter)
    {
    // Call $builder methods to build the query
    }
}
```

Testing
-------

[](#testing)

- run `docker.sh`

###  Health Score

47

—

FairBetter than 94% of packages

Maintenance62

Regular maintenance activity

Popularity18

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity81

Battle-tested with a long release history

 Bus Factor1

Top contributor holds 75.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~94 days

Recently: every ~192 days

Total

25

Last Release

239d ago

Major Versions

1.0.1 → 2.0.02020-11-18

2.0.0 → 3.0.02021-01-11

v3.x-dev → 4.0.02023-03-16

4.1.1 → 6.0.02023-03-22

5.0.0 → 6.0.22023-06-01

PHP version history (4 changes)1.0.0PHP ^7.0

3.0.0PHP ^7.2

3.1.0PHP ^7.4

4.0.0PHP ^8.2

### Community

Maintainers

![](https://www.gravatar.com/avatar/ec5fe66c458c2dcaabe289f69dac415aa71fe0dca6f48f2cb0de1d6f82a8b1f7?d=identicon)[nebkam](/maintainers/nebkam)

---

Top Contributors

[![zidar-bot](https://avatars.githubusercontent.com/u/85165793?v=4)](https://github.com/zidar-bot "zidar-bot (47 commits)")[![nebkam](https://avatars.githubusercontent.com/u/1735290?v=4)](https://github.com/nebkam "nebkam (14 commits)")[![vidic-igor](https://avatars.githubusercontent.com/u/56257335?v=4)](https://github.com/vidic-igor "vidic-igor (1 commits)")

---

Tags

attributesdoctrinedoctrine-odmmongodbphpphp8query-buildersymfony

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/nebkam-odm-search-param/health.svg)

```
[![Health](https://phpackages.com/badges/nebkam-odm-search-param/health.svg)](https://phpackages.com/packages/nebkam-odm-search-param)
```

###  Alternatives

[doctrine/mongodb-odm-bundle

Symfony Doctrine MongoDB Bundle

38418.7M195](/packages/doctrine-mongodb-odm-bundle)[doctrine/doctrine-mongo-odm-module

Laminas Module which provides Doctrine MongoDB ODM functionality

86676.6k35](/packages/doctrine-doctrine-mongo-odm-module)[sonata-project/doctrine-mongodb-admin-bundle

Symfony Sonata / Integrate Doctrine MongoDB ODM into the SonataAdminBundle

68839.2k3](/packages/sonata-project-doctrine-mongodb-admin-bundle)[ismaambrosi/generator-bundle

Generates Symfony2 documents, forms and CRUD

2692.9k](/packages/ismaambrosi-generator-bundle)[neutron/mongo-odm-silex-provider

MongoODM Silex service provider

3615.8k](/packages/neutron-mongo-odm-silex-provider)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
