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

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

freevital/laravel-repository
============================

Laravel 5 Repositories

1.0.2(9y ago)93611MITPHP

Since Feb 4Pushed 9y ago2 watchersCompare

[ Source](https://github.com/freevital/laravel-repository)[ Packagist](https://packagist.org/packages/freevital/laravel-repository)[ RSS](/packages/freevital-laravel-repository/feed)WikiDiscussions master Synced 4w ago

READMEChangelog (3)Dependencies (4)Versions (4)Used By (0)

Laravel Repositories
====================

[](#laravel-repositories)

[![Latest Stable Version](https://camo.githubusercontent.com/308ff69893bccbd500e691ed4fbf515a8894957bd29b7a83749bbf2435b347f6/68747470733a2f2f706f7365722e707567782e6f72672f66726565766974616c2f6c61726176656c2d7265706f7369746f72792f762f737461626c65)](https://packagist.org/packages/freevital/laravel-repository)[![Total Downloads](https://camo.githubusercontent.com/f9af32133e88aaac899d99ceaf0db160c72b358bfd5605cd37f8c12779594b36/68747470733a2f2f706f7365722e707567782e6f72672f66726565766974616c2f6c61726176656c2d7265706f7369746f72792f646f776e6c6f616473)](https://packagist.org/packages/freevital/laravel-repository)[![Monthly Downloads](https://camo.githubusercontent.com/67a7f096765e2f43ed7c1946d5607279c3a08d1d71ad6a239a531d2dabb94ab6/68747470733a2f2f706f7365722e707567782e6f72672f66726565766974616c2f6c61726176656c2d7265706f7369746f72792f642f6d6f6e74686c79)](https://packagist.org/packages/freevital/laravel-repository)[![License](https://camo.githubusercontent.com/ecce2015f67b69fadf81bd65028541e5b58cd09d47d8d491bfa039cef2d2ea08/68747470733a2f2f706f7365722e707567782e6f72672f66726565766974616c2f6c61726176656c2d7265706f7369746f72792f6c6963656e7365)](https://packagist.org/packages/freevital/laravel-repository)

Laravel Repositories to abstract a database layer.

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

[](#installation)

Run the following command to install the latest version:

```
composer require "freevital/laravel-repository"
```

Usage
-----

[](#usage)

### Create a Repository

[](#create-a-repository)

Your repository class must extend `Freevital\Repository\Eloquent\BaseRepository` abstract class and implement method `model()` which returns model's class name.

```
namespace App\Repositories\Eloquent;

use Freevital\Repository\Eloquent\BaseRepository;

class PostRepository extends BaseRepository
{
    /**
     * Specify Model class name.
     *
     * @return string
     */
    public function model()
    {
        return "App\Post";
    }
}
```

### Use Repository in the Controller

[](#use-repository-in-the-controller)

```
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Repositories\Criteria\BySlugCriteria;
use App\Repositories\Criteria\WithCommentsCriteria;
use App\Repositories\Eloquent\PostRepository;

class PostController extends Controller
{
    /**
     * @var PostRepository
     */
    protected $postRepository;

    /**
     * @param PostRepository $postRepository
     */
    public function __construct(PostRepository $postRepository)
    {
        $this->postRepository = $postRepository;
    }

    /**
     * Get all posts.
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function index()
    {
        $posts = $this->postRepository->all();

        return \Response::json(compact('posts'));
    }
}
```

### Create a Repository Criteria

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

Optionally you may create a separate Criteria class to apply specific query conditions. Your Criteria class must implement `Freevital\Repository\Contracts\CriteriaContract` interface.

```
namespace App\Repositories\Criteria;

use Illuminate\Database\Eloquent\Builder;
use Freevital\Repository\Contracts\CriteriaContract;
use Freevital\Repository\Contracts\RepositoryContract;

class BySlugCriteria implements CriteriaContract
{
    /**
     * @var string
     */
    protected $slug;

    /**
     * @param string $slug
     */
    public function __construct($slug)
    {
        $this->slug = $slug;
    }

    /**
     * Apply criteria in query repository.
     *
     * @param Builder            $query
     * @param RepositoryContract $repository
     *
     * @return \Illuminate\Database\Eloquent\Builder
     */
    public function apply(Builder $query, RepositoryContract $repository)
    {
        return $query->where('slug', $this->slug);
    }
}
```

### Use Repository Criteria in the Controller

[](#use-repository-criteria-in-the-controller)

You may use multiple criteria in the repository.

```
namespace App\Http\Controllers;

use App\Http\Controllers\Controller;
use App\Repositories\Criteria\BySlugCriteria;
use App\Repositories\Criteria\WithCommentsCriteria;
use App\Repositories\Eloquent\PostRepository;

class PostController extends Controller
{
     /**
     * Get a post by slug.
     *
     * @param string $slug
     *
     * @return \Illuminate\Http\JsonResponse
     */
    public function show($slug)
    {
        $post = $this->postRepository
            ->pushCriteria(new WithCommentsCriteria())
            ->pushCriteria(new BySlugCriteria($slug))
            ->first();

        return \Response::json(compact('post'));
    }
}
```

Criteria Macros
---------------

[](#criteria-macros)

If you would like to extend the repository functionality with custom common scope (ex. ActiveCriteria), you may use BaseRepository's macro method. For example, from a service provider's boot method:

```
namespace App\Providers;

use Freevital\Repository\Criteria\ActiveCriteria;
use Freevital\Repository\Eloquent\BaseRepository;
use Illuminate\Support\ServiceProvider;

class RepositoryMacroServiceProvider extends ServiceProvider
{
    /**
     * Register the application's repository macros.
     *
     * @return void
     */
    public function boot()
    {
        BaseRepository::macro('active', function (BaseRepository $repository) {
            $repository->pushCriteria(new ActiveCriteria());
        });
    }
}
```

The macro function accepts a name as its first argument, and a Closure as its second. The macro's Closure will be executed when calling the macro name from any Repository instance:

```
$this->postRepository->active()->all();
```

Available Methods
-----------------

[](#available-methods)

#### Freevital\\Repository\\Contracts\\RepositoryContract

[](#freevitalrepositorycontractsrepositorycontract)

```
paginate($limit = null, $columns = ['*'], $method = 'paginate')
simplePaginate($limit = null, $columns = ['*'])
all($columns = ['*'])
lists($column, $key = null)
find($id, $columns = ['*'])
first($columns = ['*'])
findByAttribute($attribute, $value, $columns = ['*'])
findWhere(array $where, $columns = ['*'])
findWhereIn($attribute, array $values, $columns = ['*'])
findWhereNotIn($attribute, array $values, $columns = ['*'])
count()
create(array $attributes)
update(array $attributes, $id)
updateOrCreate(array $attributes, array $values = [])
updateActiveStatus($status, int $id)
delete($id)
forceDelete($id)
deleteWhere(array $where)
forceDeleteWhere(array $where)
has($relation)
with($relations)
whereHas($relation, $closure)
orderBy($column, $direction = 'asc')
visible(array $attributes)
hidden(array $attributes)
scopeQuery(\Closure $scope)
resetScope()
```

#### Freevital\\Repository\\Contracts\\RepositoryCriteriaContract

[](#freevitalrepositorycontractsrepositorycriteriacontract)

```
pushCriteria($criteria)
popCriteria($criteria)
getCriteria()
getByCriteria(CriteriaContract $criteria)
skipCriteria($status = true)
resetCriteria()
```

#### Freevital\\Repository\\Contracts\\CriteriaContract

[](#freevitalrepositorycontractscriteriacontract)

```
apply(Builder $query, RepositoryContract $repository)
```

Example usage
-------------

[](#example-usage)

Get all entities:

```
$this->postRepository->all();

// Fetch the specific columns
$this->postRepository->all(['id', 'title']);
```

Entity pagination:

```
$this->postRepository->paginate(20);
```

Get an entity by id:

```
$this->postRepository->find($id);
```

Get first entity:

```
$this->postRepository->pushCriteria(...)->first();
```

Get entities count:

```
$this->postRepository->pushCriteria(...)->count();
```

Create new entity:

```
$this->postRepository->create(Input::all());
```

Update an entity by id:

```
$this->postRepository->update(Input::all(), $id);
```

Delete or force delete an entity by id:

```
$this->postRepository->delete($id);
$this->postRepository->forceDelete($id);
```

Credits
-------

[](#credits)

This package in mainly based on package by [@andersao](https://github.com/andersao/l5-repository).

License
-------

[](#license)

The contents of this repository is released under the MIT license.

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity19

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 100% 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 ~33 days

Total

3

Last Release

3366d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/1826619?v=4)[Vitaliy Kravchyshyn](/maintainers/freevital)[@freevital](https://github.com/freevital)

---

Top Contributors

[![freevital](https://avatars.githubusercontent.com/u/1826619?v=4)](https://github.com/freevital "freevital (15 commits)")

---

Tags

database-layereloquentlaravellaravel-modelslaravel-repositorieslaravel-repositoryrepositorieslaravelmodeleloquentrepository

### Embed Badge

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

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

###  Alternatives

[larastan/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

6.4k51.0M7.7k](/packages/larastan-larastan)[mongodb/laravel-mongodb

A MongoDB based Eloquent model and Query builder for Laravel

7.1k8.0M90](/packages/mongodb-laravel-mongodb)[prettus/l5-repository

Laravel 8|9|10|11|12|13 - Repositories to the database layer

4.2k11.2M155](/packages/prettus-l5-repository)[laravel/ai

The official AI SDK for Laravel.

1.0k2.1M165](/packages/laravel-ai)[psalm/plugin-laravel

Psalm plugin for Laravel

3345.1M337](/packages/psalm-plugin-laravel)[calebdw/larastan

Larastan - Discover bugs in your code without running it. A phpstan/phpstan extension for Laravel

15104.9k4](/packages/calebdw-larastan)

PHPackages © 2026

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