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

Abandoned → [prettus/l5-repository](/?search=prettus%2Fl5-repository)Library[Database &amp; ORM](/categories/database)

prettus/laravel-repository
==========================

Repositories to abstract the database layer

2.0.1(10y ago)1617.6k5MITPHPPHP &gt;=5.4.0

Since Jan 26Pushed 10y ago1 watchersCompare

[ Source](https://github.com/andersao/laravel-repository)[ Packagist](https://packagist.org/packages/prettus/laravel-repository)[ RSS](/packages/prettus-laravel-repository/feed)WikiDiscussions master Synced 1mo ago

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

\###This package is abandoned and no longer maintained. The author suggests using the  package instead.

Laravel 4 - Repositories
========================

[](#laravel-4---repositories)

[![Build Status](https://camo.githubusercontent.com/79d05f03800fc2b88470a3998bd6a1de70f3730ecdf424085d56996b169ee95d/68747470733a2f2f7472617669732d63692e6f72672f616e64657273616f2f6c61726176656c2d7265706f7369746f72792e737667)](https://travis-ci.org/andersao/laravel-repository.svg)[![Total Downloads](https://camo.githubusercontent.com/e8d25afd530e056ea04c1de2bfde21c3775988c7d352f71650cd2fba04421fc9/68747470733a2f2f706f7365722e707567782e6f72672f707265747475732f6c61726176656c2d7265706f7369746f72792f646f776e6c6f6164732e737667)](https://packagist.org/packages/prettus/laravel-repository)[![Latest Stable Version](https://camo.githubusercontent.com/01e804091ccdcf22d665a6852671fcfbbea62d0bab802d91f992f0921ecbaa5a/68747470733a2f2f706f7365722e707567782e6f72672f707265747475732f6c61726176656c2d7265706f7369746f72792f762f737461626c652e737667)](https://packagist.org/packages/prettus/laravel-repository)[![Latest Unstable Version](https://camo.githubusercontent.com/d12710a713f8ca37c2e49da17c76b71a523470f997f03947f1fc5bb8bff5d0a8/68747470733a2f2f706f7365722e707567782e6f72672f707265747475732f6c61726176656c2d7265706f7369746f72792f762f756e737461626c652e737667)](https://packagist.org/packages/prettus/laravel-repository)[![License](https://camo.githubusercontent.com/1fff13509101c6723597e4af2c0dac97e115fa4ac3cf813e8eb9339431af9a4d/68747470733a2f2f706f7365722e707567782e6f72672f707265747475732f6c61726176656c2d7265706f7369746f72792f6c6963656e73652e737667)](https://packagist.org/packages/prettus/laravel-repository)

Laravel 4 Repositories is used to abstract the data layer, making our application more flexible to maintain.

See [Laravel 5 - Repositories](https://github.com/andersao/l5-repository)

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

[](#installation)

Add this line "prettus/laravel-repository": "2.0.\*" in your composer.json.

```
"require": {
    "prettus/laravel-repository": "2.0.*"
}
```

Issue composer update

Add to app/config/app.php service provider array:

```
    'Prettus\Repository\RepositoryServiceProvider',
```

Publish Configuration

```
php artisan config:publish prettus/laravel-repository
```

Methods
-------

[](#methods)

### Repository

[](#repository)

- scopeReset()
- find($id, $columns = \['\*'\])
- findByField($field, $value, $columns = \['\*'\])
- all($columns = array('\*'))
- paginate($limit = null, $columns = \['\*'\])
- create(array $attributes)
- update(array $attributes, $id)
- delete($id)
- getModel()
- with(array $relations);
- pushCriteria(Criteria $criteria)
- getCriteria()
- getByCriteria(Criteria $criteria)
- skipCriteria()

### Criteria

[](#criteria)

- apply($query)

Usage
-----

[](#usage)

### Create a Model

[](#create-a-model)

Create your model normally , but it is important to define the attributes that can be filled from the input form data.

```
class Post extends Eloquent { // or Ardent, Or any other Model Class

    protected $fillable = [
        'title',
        'author',
        ...
     ];

     ...
}
```

### Create a Repository

[](#create-a-repository)

```
use Prettus\Repository\Eloquent\Repository;

class PostRepository extends Repository {

    public function __construct(Post $model)
    {
        parent::__construct($model);
    }

}
```

### Use methods

[](#use-methods)

```
class PostsController extends BaseController {

    /**
     * @var PostRepository
     */
    protected $repository;

    public function __construct(PostRepository $repository){
        $this->repository = $repository;
    }

    ....
}
```

Find all results in Repository

```
$posts = $this->repository->all();
```

Find all results in Repository with pagination

```
$posts = $this->repository->paginate($limit = null, $columns = ['*']);
```

Find by result by id

```
$post = $this->repository->find($id);
```

Create new entry in Repository

```
$post = $this->repository->create( Input::all() );
```

Update entry in Repository

```
$post = $this->repository->update( Input::all(), $id );
```

Delete entry in Repository

```
$this->repository->delete($id)
```

### Create a Criteria

[](#create-a-criteria)

Criteria is a way to change the repository of the query by applying specific conditions according to their need . You can add multiple Criteria in your repository

```
class MyCriteria implements \Prettus\Repository\Contracts\Criteria {

    public function apply($query)
    {
        $query = $query->where('user_id','=', Auth::user()->id );
        return $query;
    }
}
```

### Using the Criteria in a Controller

[](#using-the-criteria-in-a-controller)

```
class PostsController extends BaseController {

    /**
     * @var PostRepository
     */
    protected $repository;

    public function __construct(PostRepository $repository){
        $this->repository = $repository;
    }

    public function index()
    {
        $this->repository->pushCriteria(new MyCriteria());
        $posts = $this->repository->all();
		...
    }

}
```

Getting results from criteria

```
$posts = $this->repository->getByCriteria(new MyCriteria());
```

Setting Criteria default in Repository

```
use Prettus\Repository\Eloquent\Repository;

class PostRepository extends Repository {

    public function __construct(Post $model)
    {
        parent::__construct($model);
    }

    public function boot(){
        $this->pushCriteria(new MyCriteria());
        $this->pushCriteria(new AnotherCriteria());
        ...
    }

}
```

### Skip criteria defined in the repository

[](#skip-criteria-defined-in-the-repository)

Use *skipCriteria* before any method in the repository

```
$posts = $this->repository->skipCriteria()->all();
```

### Using the RequestCriteria

[](#using-the-requestcriteria)

RequestCriteria is a standard Criteria implementation. It enables filters perform in the repository from parameters sent in the request.

You can perform a dynamic search , filtering the data and customize queries

To use the Criteria in your repository , you can add a new criteria in the boot method of your repository , or directly use in your controller , in order to filter out only a few requests

\####Enabling in your Repository

```
use Prettus\Repository\Eloquent\Repository;
use Prettus\Repository\Criteria\RequestCriteria;

class PostRepository extends Repository {

	/**
     * @var array
     */
    protected $fieldSearchable = [
        'name',
        'email'
    ];

    public function __construct(Post $model)
    {
        parent::__construct($model);
    }

    public function boot(){
        $this->pushCriteria(app('Prettus\Repository\Criteria\RequestCriteria'));
        ...
    }

}
```

Remember, you need to define which fields from the model can are searchable.

In your repository set **$fieldSearchable** with their fields searchable.

```
protected $fieldSearchable = [
	'name',
	'email'
];
```

You can set the type of condition will be used to perform the query , the default condition is "**=**"

```
protected $fieldSearchable = [
	'name'=>'like',
	'email', // Default Condition "="
	'your_field'=>'condition'
];
```

\####Enabling in your Controller

```
	public function index()
    {
        $this->repository->pushCriteria(app('Prettus\Repository\Criteria\RequestCriteria'));
        $posts = $this->repository->all();
		...
    }
```

#### Example the Crirteria

[](#example-the-crirteria)

Request all data without filter by request

**

```
[
    {
        "id": 1,
        "name": "Anderson Andrade",
        "email": "email@gmail.com",
        "created_at": "-0001-11-30 00:00:00",
        "updated_at": "-0001-11-30 00:00:00"
    },
    {
        "id": 2,
        "name": "Lorem Ipsum",
        "email": "lorem@ipsum.com",
        "created_at": "-0001-11-30 00:00:00",
        "updated_at": "-0001-11-30 00:00:00"
    },
    {
        "id": 3,
        "name": "Laravel",
        "email": "laravel@gmail.com",
        "created_at": "-0001-11-30 00:00:00",
        "updated_at": "-0001-11-30 00:00:00"
    }
]
```

Conducting research in the repository

**

or

*[http://prettus.local/users?search=Anderson&amp;searchFields=name:like](http://prettus.local/users?search=Anderson&searchFields=name:like)*

or

*[http://prettus.local/users?search=email@gmail.com&amp;searchFields=email:=](http://prettus.local/users?search=email@gmail.com&searchFields=email:=)*

```
[
    {
        "id": 1,
        "name": "Anderson Andrade",
        "email": "email@gmail.com",
        "created_at": "-0001-11-30 00:00:00",
        "updated_at": "-0001-11-30 00:00:00"
    }
]
```

Filtering fields

**

```
[
    {
        "id": 1,
        "name": "Anderson Andrade"
    },
    {
        "id": 2,
        "name": "Lorem Ipsum"
    },
    {
        "id": 3,
        "name": "Laravel"
    }
]
```

Sorting the results

*[http://prettus.local/users?filter=id;name&amp;orderBy=id&amp;sortedBy=desc](http://prettus.local/users?filter=id;name&orderBy=id&sortedBy=desc)*

```
[
    {
        "id": 3,
        "name": "Laravel"
    },
    {
        "id": 2,
        "name": "Lorem Ipsum"
    },
    {
        "id": 1,
        "name": "Anderson Andrade"
    }
]
```

\####Overwrite params name

You can change the name of the parameters in the configuration file **config/repository-criteria.php**

Author
======

[](#author)

Anderson Andrade -

###  Health Score

34

—

LowBetter than 77% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity30

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity60

Established project with proven stability

 Bus Factor1

Top contributor holds 72.7% 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 ~60 days

Total

3

Last Release

4005d ago

Major Versions

1.0.0 → 2.0.02015-02-21

### Community

Maintainers

![](https://www.gravatar.com/avatar/8dcb78e07fb7234426384d3dd97aa21c1e293f8d5d5e6239b71436a4045321f9?d=identicon)[andersonandrade](/maintainers/andersonandrade)

---

Top Contributors

[![andersao](https://avatars.githubusercontent.com/u/1131667?v=4)](https://github.com/andersao "andersao (16 commits)")[![jartaud](https://avatars.githubusercontent.com/u/266818?v=4)](https://github.com/jartaud "jartaud (6 commits)")

---

Tags

laravelmodeleloquentrepository

### Embed Badge

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

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

###  Alternatives

[prettus/l5-repository

Laravel 5|6|7|8|9|10|11|12 - Repositories to the database layer

4.2k10.8M145](/packages/prettus-l5-repository)

PHPackages © 2026

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