PHPackages                             phpddd/repository - 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. phpddd/repository

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

phpddd/repository
=================

Implementation of a base repository

3.1.0(9y ago)275985[1 issues](https://github.com/nilportugues/repository/issues)MITPHPPHP &gt;=7.0

Since Jan 18Pushed 9y ago1 watchersCompare

[ Source](https://github.com/nilportugues/repository)[ Packagist](https://packagist.org/packages/phpddd/repository)[ Docs](http://nilportugues.com)[ RSS](/packages/phpddd-repository/feed)WikiDiscussions master Synced 1w ago

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

Repository
==========

[](#repository)

[![PHP7 Tested](https://camo.githubusercontent.com/da8c399b74a051960f3100b84bedb693b089e26b4d0c3f4620f0f185857686f9/687474703a2f2f7068702d6579652e636f6d2f62616467652f6e696c706f727475677565732f7265706f7369746f72792f70687037302e737667)](https://camo.githubusercontent.com/da8c399b74a051960f3100b84bedb693b089e26b4d0c3f4620f0f185857686f9/687474703a2f2f7068702d6579652e636f6d2f62616467652f6e696c706f727475677565732f7265706f7369746f72792f70687037302e737667)[![Build Status](https://camo.githubusercontent.com/2c6c820bd9fc59ea5524d7830b0b1f95e31ee09d02545807460ca151aaafeca8/68747470733a2f2f7472617669732d63692e6f72672f5048505265706f7369746f72792f7265706f7369746f72792e737667)](https://travis-ci.org/PHPRepository/repository) [![Scrutinizer Code Quality](https://camo.githubusercontent.com/306e330a0b42bf27b70dac697d54406f2c0bdc94bfcbfde6409b34f1c864468e/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f6e696c706f727475677565732f7265706f7369746f72792f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/nilportugues/repository/?branch=master) [![SensioLabsInsight](https://camo.githubusercontent.com/b5b8b9698af6399c08ee5d54b2ff94e214c9958ea76d04e0361039e166903d2d/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f34323865316639362d626366342d346465652d383636652d3761376362356462353265342f6d696e692e706e67)](https://insight.sensiolabs.com/projects/428e1f96-bcf4-4dee-866e-7a7cb5db52e4) [![Latest Stable Version](https://camo.githubusercontent.com/7b2b8f00ae86060ac9073d67110930d3f8557aeeb5c5dd9e2a5edeb466ecef3e/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7265706f7369746f72792f762f737461626c65)](https://packagist.org/packages/nilportugues/repository) [![Total Downloads](https://camo.githubusercontent.com/5c5375fbfb35853c1dbfa3113978444adbc198aee031d9006bfadf8c050e68af/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7265706f7369746f72792f646f776e6c6f616473)](https://packagist.org/packages/nilportugues/repository) [![License](https://camo.githubusercontent.com/36051800dc7f15129e619facfb5f02c2d503444a76f0faa9dd946744e90a4d2f/68747470733a2f2f706f7365722e707567782e6f72672f6e696c706f727475677565732f7265706f7369746f72792f6c6963656e7365)](https://packagist.org/packages/nilportugues/repository)[![Donate](https://camo.githubusercontent.com/7b6de155df30b37b25eb5fec52f9213680c3dbf067dfb7d7e2850ac4096c7d05/68747470733a2f2f7777772e70617970616c6f626a656374732e636f6d2f656e5f55532f692f62746e2f62746e5f646f6e6174655f534d2e676966)](https://paypal.me/nilportugues)

Generic implementation and definition of a Repository and its in-memory implementation.

Installation
------------

[](#installation)

Use [Composer](https://getcomposer.org) to install the package:

```
$ composer require nilportugues/repository
```

InMemory Implementation
-----------------------

[](#inmemory-implementation)

A custom repository can be easily created by extending the InMemoryRepository class provided.

```
use NilPortugues\Foundation\Infrastructure\Model\Repository\InMemory\InMemoryRepository

class MyInMemoryRepository extends InMemoryRepository
{
    //... your custom implementation.
}
```

Implementation can be seen [here](https://github.com/nilportugues/php-repository/blob/master/src/Infrastructure/Model/Repository/InMemory/InMemoryRepository.php).

The base InMemoryRepository implements the following interfaces:

- `NilPortugues\Foundation\Domain\Model\Repository\Contracts\Repository`
- `NilPortugues\Foundation\Domain\Model\Repository\Contracts\PageRepository`
- `NilPortugues\Foundation\Domain\Model\Repository\Contracts\ReadRepository`
- `NilPortugues\Foundation\Domain\Model\Repository\Contracts\WriteRepository`

InMemoryRepository Example
--------------------------

[](#inmemoryrepository-example)

An example with a complete implementation can be found in the [/example directory](https://github.com/nilportugues/php-repository/tree/master/example).

In the example:

- Colors are defined as a class implementing the `Identity` interface.
- A `ColorRepository` is implemented. Will throw exception if Color is not found.
- Examples on how to filter are provided in the `example.php` file.

Foundation Classes
------------------

[](#foundation-classes)

Interaction with the repository requires the usage of the following classes or classes implementing interfaces.

- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Fields**

    - `public function __construct(array $fields = [])`
    - `public function add($field)`
    - `public function get()`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Filter**

    - `public function filters()`
    - `public function must()`
    - `public function mustNot()`
    - `public function should()`
    - `public function clear()`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\BaseFilter**

    - `public function notStartsWith($filterName, $value)`
    - `public function notEndsWith($filterName, $value)`
    - `public function notEmpty($filterName)`
    - `public function empty($filterName)`
    - `public function notNull($filterName)`
    - `public function empty($filterName)`
    - `public function startsWith($filterName, $value)`
    - `public function endsWith($filterName, $value)`
    - `public function equal($filterName, $value)`
    - `public function notEqual($filterName, $value)`
    - `public function includeGroup($filterName, array $value)`
    - `public function notIncludeGroup($filterName, array $value)`
    - `public function range($filterName, $firstValue, $secondValue)`
    - `public function notRange($filterName, $firstValue, $secondValue)`
    - `public function notContain($filterName, $value)`
    - `public function contain($filterName, $value)`
    - `public function beGreaterThanOrEqual($filterName, $value)`
    - `public function beGreaterThan($filterName, $value)`
    - `public function beLessThanOrEqual($filterName, $value)`
    - `public function beLessThan($filterName, $value)`
    - `public function clear()`
    - `public function get()`
    - `public function hasEmpty($filterName)` //alias of empty() for BC reasons.
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Order**

    - `public function __construct($direction)`
    - `public function isDescending()`
    - `public function isAscending()`
    - `public function __toString()`
    - `public function equals($object)`
    - `public function direction()`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Pageable**

    - `public function __construct($pageNumber, $pageSize, SortInterface $sort = null, FilterInterface $filter = null, FieldsInterface $fields = null)`
    - `public function offset()`
    - `public function pageNumber()`
    - `public function sortings()`
    - `public function next()`
    - `public function pageSize()`
    - `public function previousOrFirst()`
    - `public function hasPrevious()`
    - `public function first()`
    - `public function filters()`
    - `public function fields()`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Page**

    - `public function __construct(array $elements, $totalElements, $pageNumber, $totalPages, SortInterface $sort = null, FilterInterface $filter = null, FieldsInterface $fields = null)`
    - `public function content()`
    - `public function hasPrevious()`
    - `public function isFirst()`
    - `public function isLast()`
    - `public function hasNext()`
    - `public function pageSize()`
    - `public function pageNumber()`
    - `public function totalPages()`
    - `public function nextPageable()`
    - `public function sortings()`
    - `public function filters()`
    - `public function fields()`
    - `public function previousPageable()`
    - `public function totalElements()`
    - `public function map(callable $converter)`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Sort**

    - `public function __construct(array $properties = [], OrderInterface $order = null)`
    - `public function andSort(SortInterface $sort)`
    - `public function orders()`
    - `public function equals(SortInterface $sort)`
    - `public function orderFor($propertyName)`
    - `public function setOrderFor($propertyName, OrderInterface $order)`
    - `public function property($propertyName)`

#### Interfaces

[](#interfaces)

- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Contracts\\Identity**

    - `public function id()`
    - `public function __toString()`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Contracts\\Repository**

    - `public function count(Filter $filter = null)`
    - `public function exists(Identity $id)`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Contracts\\PageRepository**

    - `public function findAll(Pageable $pageable = null)`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Contracts\\ReadRepository**

    - `public function find(Identity $id, Fields $fields = null)`
    - `public function findBy(Filter $filter = null, Sort $sort = null, Fields $fields = null)`
    - `public function findByDistinct(Fields $distinctFields, Filter $filter = null, Sort $sort = null, Fields $fields = null)`
- **NilPortugues\\Foundation\\Domain\\Model\\Repository\\Contracts\\WriteRepository**

    - `public function add($value)`
    - `public function addAll(array $values)`
    - `public function remove(Identity $id)`
    - `public function removeAll(Filter $filter = null)`
    - `public function transactional(callable $transaction)`

---

Quality
-------

[](#quality)

To run the PHPUnit tests at the command line, go to the tests directory and issue phpunit.

This library attempts to comply with [PSR-1](http://www.php-fig.org/psr/psr-1/), [PSR-2](http://www.php-fig.org/psr/psr-2/), [PSR-4](http://www.php-fig.org/psr/psr-4/).

If you notice compliance oversights, please send a patch via [Pull Request](https://github.com/nilportugues/repository/pulls).

Contribute
----------

[](#contribute)

Contributions to the package are always welcome!

- Report any bugs or issues you find on the [issue tracker](https://github.com/nilportugues/repository/issues/new).
- You can grab the source code at the package's [Git repository](https://github.com/nilportugues/repository).

Support
-------

[](#support)

Get in touch with me using one of the following means:

- Emailing me at
- Opening an [Issue](https://github.com/nilportugues/repository/issues/new)

Authors
-------

[](#authors)

- [Nil Portugués Calderó](http://nilportugues.com)
- [The Community Contributors](https://github.com/nilportugues/repository/graphs/contributors)

License
-------

[](#license)

The code base is licensed under the [MIT license](LICENSE).

###  Health Score

34

—

LowBetter than 75% of packages

Maintenance19

Infrequent updates — may be unmaintained

Popularity25

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity67

Established project with proven stability

 Bus Factor1

Top contributor holds 97.6% 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 ~22 days

Recently: every ~74 days

Total

19

Last Release

3385d ago

Major Versions

1.1.2 → 2.0.02016-02-11

2.3.1 → 3.0.02016-08-05

PHP version history (3 changes)1.0.0-betaPHP &gt;=5.5

1.0.0PHP &gt;=5.6

3.0.0PHP &gt;=7.0

### Community

Maintainers

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

---

Top Contributors

[![nilportugues](https://avatars.githubusercontent.com/u/550948?v=4)](https://github.com/nilportugues "nilportugues (83 commits)")[![flavioheleno](https://avatars.githubusercontent.com/u/471860?v=4)](https://github.com/flavioheleno "flavioheleno (2 commits)")

---

Tags

clean-architecturecomposercrudddddomain-driven-designfilterhexagonal-architectureormpageablepaginationphpphp7repositorysortstoragepaginationrepositorydddadaptershexagonalnil portuguesnilportuguesports and adaptersportspageable

###  Code Quality

TestsPHPUnit

Code StylePHP CS Fixer

### Embed Badge

![Health badge](/badges/phpddd-repository/health.svg)

```
[![Health](https://phpackages.com/badges/phpddd-repository/health.svg)](https://phpackages.com/packages/phpddd-repository)
```

###  Alternatives

[nilportugues/repository

Implementation of a base repository

272.9k6](/packages/nilportugues-repository)[nilportugues/sql-repository

SQL Repository implementation

361.9k](/packages/nilportugues-sql-repository)[pagerfanta/pagerfanta

Pagination for PHP

42451.3M268](/packages/pagerfanta-pagerfanta)

PHPackages © 2026

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