PHPackages                             mhndev/yii2-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. [Framework](/categories/framework)
4. /
5. mhndev/yii2-repository

ActiveLibrary[Framework](/categories/framework)

mhndev/yii2-repository
======================

repository implementation in Yii2

1.0.10(9y ago)389.9k↓68.3%10[3 issues](https://github.com/mhndev/yii2-repository/issues)MITPHP

Since Sep 11Pushed 9y ago6 watchersCompare

[ Source](https://github.com/mhndev/yii2-repository)[ Packagist](https://packagist.org/packages/mhndev/yii2-repository)[ RSS](/packages/mhndev-yii2-repository/feed)WikiDiscussions develop Synced 3d ago

READMEChangelogDependencies (1)Versions (12)Used By (0)

Yii2 Repository Pattern implementation
======================================

[](#yii2-repository-pattern-implementation)

Yii2 Repository Pattern implementation in Yii2

you can read more about repository patterns here :

Table of Contents
-----------------

[](#table-of-contents)

- [Installation](#installation)

    - [Composer](#composer)
- [Methods](#methods)

    - [RepositoryInterface](#prettusrepositorycontractsrepositoryinterface)
- [Usage](#usage)

    - [Create a Model](#create-a-model)
    - [Create a Repository](#create-a-repository)
    - [Attach your Repository to container](#attach-your-repository-to-container)
    - [Repository Sample Usage](#repository-sample-usage)

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

[](#installation)

### Composer

[](#composer)

The preferred way to install this extension is through [composer](http://getcomposer.org/download/).

Either run

```
composer require --prefer-dist mhndev/yii2-repository "1.*"

```

or add

```
"mhndev/yii2-repository": "1.*"

```

to the require section of your `composer.json` file.

Methods
-------

[](#methods)

### mhndev\\yii2Repository\\Interfaces\\iRepository

[](#mhndevyii2repositoryinterfacesirepository)

```
    public function with(array $with = []);

    public function columns(array $columns = ['*']);

    public function limit($limit = 10);

    public function orderBy($orderBy, $sort = 'DESC');

    public function create(array $data);

    public function createMany(array $data);

    public function findOneById($id, $returnArray = false);

    public function findOneBy($key, $value, $operation = '=', $returnArray = false);

    public function findManyBy($key, $value, $operation = '=', $withPagination = true, $returnArray = false);

    public function findManyByIds(array $ids, $withPagination = true, $returnArray = false);

    public function findAll($withPagination = true, $returnArray = false);

    public function findManyByCriteria(array $criteria = [], $withPagination = true, $with = [], $returnArray = false);

    public function updateOneById($id, array $data = []);

    public function updateOneBy($key, $value, array $data = []);

    public function updateOneByCriteria(array $criteria, array $data = []);

    public function updateManyBy($key, $value, array $data = [], $operation = '=');

    public function updateManyByCriteria(array $criteria = [], array $data = []);

    public function updateManyByIds(array $ids, array $data = []);

    public function deleteOneById($id);

    public function allExist(array $ids);

    public function deleteOneBy($key, $value, $operation = '=');

    public function deleteOneByCriteria(array $criteria = []);

    public function deleteManyBy($key, $value, $operation = '=');

    public function deleteManyByCriteria(array $criteria = []);

    public function searchByCriteria();

    public function deleteManyByIds(array $ids);

    public function inc($id, $field, $count = 1);

    public function dec($id, $field, $count = 1);
```

Usage
-----

[](#usage)

### Create a Model

[](#create-a-model)

create your ActiveRecord Model :

```
namespace app\models;

use yii\db\ActiveRecord;

/**
 * Class City
 * @package app\models
 */
class Post extends ActiveRecord
{

    /**
     * @return string
     */
    public static function tableName()
    {
        return 'posts';

    }

    /**
     * @return array
     */
    public function rules()
    {
        return [

            [['title'], 'required'],

        ];
    }

}
```

### Create a Repository Interface

[](#create-a-repository-interface)

```
namespace app\repositories\interfaces;
use mhndev\yii2Repository\Interfaces\iRepository;

interface iPostRepository extends iRepository
{

}
```

### Create a Repository class

[](#create-a-repository-class)

```
namespace app\repositories;

use app\repositories\interfaces\iPostRepository;
use mhndev\yii2Repository\AbstractSqlArRepository;

class PostRepository extends AbstractSqlArRepository implements iPostRepository
{

}
```

or

### create a Repository as a Yii component

[](#create-a-repository-as-a-yii-component)

```
class PostRepository extends Component implements iPostRepository
{

    const PRIMARY_KEY = 'id';

    const APPLICATION_KEY = 'id';

    use SqlArRepositoryTrait {
        init as repositoryInit;
    }

    public function init()
    {
        parent::init();

        $this->repositoryInit();
    }
}
```

this approach is useful when toy have a class which is already extending a class and can't extend AbstractRepository class just like yii components by using traits you can use this classes as yii component.

if your model is using sql as it's data source and your model actually is extending yii\\db\\ActiveRecord your repository should extend mhndev\\yii2Repository\\AbstractSqlArRepository.

and if your data source is mongodb and your model actually is extending yii\\mongodb\\ActiveRecord your repository should extend mhndev\\yii2Repository\\AbstractMongoArRepository.

and consider your application can use power of both sql and document-based databses (mongo)

### Attach your Repository to container

[](#attach-your-repository-to-container)

```
Yii::$container->set(\app\repositories\interfaces\iPostRepository::class, [
    'class' => \app\repositories\PostRepository::class
]);

Yii::$container->set('postRepository', function($container, $params, $config){
    return new \app\repositories\PostRepository(new \app\models\Post());
});
```

if you are coding in a module you can put above code in your module bootstrap file. and also you can don't use container and create repository object every where you want like this :

```
$postRepository = new \app\repositories\PostRepository(new \app\models\Post());
```

### Repository Sample Usage

[](#repository-sample-usage)

sample usage which I show by using a controller.

```
namespace app\controllers;

use app\repositories\interfaces\iPostRepository;
use Yii;
use yii\web\Controller;
use yii\web\Response;

/**
 * PostController
 */
class PostController extends Controller
{

    /**
     * @var iPostRepository
     */
    protected $postRepository;

    /**
     * @var bool
     */
    public $enableCsrfValidation = false;

    /**
     * init
     */
    public function init()
    {
        parent::init();
        $this->postRepository = Yii::$container->get('postRepository');

        Yii::$app->response->format = Response::FORMAT_JSON;
    }

    /**
     * @return array
     */
    public function verbs()
    {
        return [
            'create'   => ['POST'],
            'delete'   => ['DELETE'],
            'update'   => ['PUT'],
            'index'    => ['GET'],
            'show'     => ['GET'],
            'delete-multiple' => ['DELETE']
        ];
    }

    /**
     * @return mixed
     */
    public function actionCreate()
    {
        $data = Yii::$app->request->post();

        $post = $this->postRepository->create($data);

        return $post;
    }

    /**
     * @param $id
     */
    public function actionDelete($id)
    {
        $this->postRepository->deleteOneById($id);
    }

    /**
     * @param $id
     * @return bool
     */
    public function actionUpdate($id)
    {
        $data = Yii::$app->request->post();

        $post = $this->postRepository->updateOneById($id, $data);

        return $post;
    }

    /**
     * @return mixed
     */
    public function actionIndex()
    {
        return $this->postRepository->searchByCriteria();
    }

    /**
     * @param $id
     * @return mixed
     */
    public function actionShow($id)
    {
        return $this->postRepository->findOneById($id);
    }

    /**
     *
     */
    public function actionDeleteMultiple()
    {
        $ids = Yii::$app->request->post()['ids'];

        $deletedCount = $this->postRepository->deleteManyByIds($ids);
    }

}
```

###  Health Score

39

—

LowBetter than 84% of packages

Maintenance18

Infrequent updates — may be unmaintained

Popularity38

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity70

Established project with proven stability

 Bus Factor1

Top contributor holds 89.5% 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 ~18 days

Recently: every ~39 days

Total

10

Last Release

3417d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/5c3e5d182214e2e6b989a2230bcae80b2107b088da1c6dbea6f6f8d28702e272?d=identicon)[majidphpdeveloper](/maintainers/majidphpdeveloper)

---

Top Contributors

[![mhndev](https://avatars.githubusercontent.com/u/5164182?v=4)](https://github.com/mhndev "mhndev (17 commits)")[![pleasereachmeoutonmoeinxyz](https://avatars.githubusercontent.com/u/1267787?v=4)](https://github.com/pleasereachmeoutonmoeinxyz "pleasereachmeoutonmoeinxyz (2 commits)")

---

Tags

design-patternsmongodbrepository-patternyii-componentyii2repository patterndesign pattern

### Embed Badge

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

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

###  Alternatives

[craftcms/cms

Craft CMS

3.6k3.6M3.1k](/packages/craftcms-cms)[yiisoft/yii2-redis

Redis Cache, Session and ActiveRecord for the Yii framework

47912.3M280](/packages/yiisoft-yii2-redis)[yiisoft/yii2-app-advanced

Yii 2 Advanced Project Template

1.7k961.7k5](/packages/yiisoft-yii2-app-advanced)[yiisoft/yii2-httpclient

HTTP client extension for the Yii framework

44411.6M327](/packages/yiisoft-yii2-httpclient)[yiisoft/yii2-debug

The debugger extension for the Yii framework

21624.5M620](/packages/yiisoft-yii2-debug)[yiisoft/yii2-app-basic

Yii 2 Basic Project Template

7101.8M8](/packages/yiisoft-yii2-app-basic)

PHPackages © 2026

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