PHPackages                             frankdejonge/doctrine-query-specification - 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. frankdejonge/doctrine-query-specification

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

frankdejonge/doctrine-query-specification
=========================================

Specification based querying for Doctrine2

0.4.0(1y ago)7564.6k↓21.5%4[1 issues](https://github.com/frankdejonge/doctrine-query-specification/issues)MITPHPPHP ^7.4|^8.0

Since Nov 10Pushed 1y ago4 watchersCompare

[ Source](https://github.com/frankdejonge/doctrine-query-specification)[ Packagist](https://packagist.org/packages/frankdejonge/doctrine-query-specification)[ RSS](/packages/frankdejonge-doctrine-query-specification/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (5)Versions (7)Used By (0)

Doctrine2 - Specification based querying.
=========================================

[](#doctrine2---specification-based-querying)

[![.github/workflows/main.yaml](https://github.com/frankdejonge/doctrine-query-specification/actions/workflows/main.yaml/badge.svg)](https://github.com/frankdejonge/doctrine-query-specification/actions/workflows/main.yaml)

This packages eases the translation of domain questions to things doctrine can understand.

Query specifications allow you to hook into three stages of the query building process.

1. Applying constraints
2. Modifying the query builder.
3. Modifying the query.

This allows you to encapsulate query logic in bite-sized, small, object. When naming these objects you can take into account what purpose they fulfill.

Installation:
-------------

[](#installation)

```
composer require frankdejonge/doctrine-query-specification
```

Effect
------

[](#effect)

Turn code like this:

```
// Get the newest 5 articles, needed for front-page
$qb = $articleRepository->createQueryBuilder('a');
$query = $qb
    ->where($qb->expr()->eq('a.published', true))
    ->getQuery()
    ->getResult();
```

Into this:

```
$articles = $articleRepositoryFieldEquals->findBySpecification(new FrontPageArticles());
```

Examples
--------

[](#examples)

### Specification aware repositories.

[](#specification-aware-repositories)

```
use FrankDeJonge\DoctrineQuerySpecification\SpecificationAwareEntityRepository;
use FrankDeJonge\DoctrineQuerySpecification\SpecificationAwareRepository;
use FrankDeJonge\DoctrineQuerySpecification\SpecificationAwareRepositoryTrait;

class ArticleRepository extends SpecificationAwareEntityRepository
{

}
// OR
class ArticleRepository implements SpecificationAwareRepository
{
    use SpecificationAwareRepositoryTrait;
}
```

### Query constraints.

[](#query-constraints)

```
