Giter VIP home page Giter VIP logo

laravel-repositories's Introduction

Laravel Repositories

Build Status Latest Stable Version Total Downloads License

Laravel Repositories is a package for Laravel 5 which is used to abstract the database layer. This makes applications much easier to maintain.

This package was originally created by Bosnadev, who is no longer maintaining it; therefore, I have decided to take this project over and assure its maintenance.

Installation

Run the following command from you terminal:

composer require dugajean/repositories

Usage

First, create your repository class with this command:

php artisan make:repository Film

Where Film is the name of an existing model. If the model does not exist, it will be generated for you.

Finally, use the repository in the controller:

<?php 

namespace App\Http\Controllers;

use App\Repositories\FilmRepository;

class FilmsController extends Controller {

    /**
     * @var FilmRepository 
     */
    private $filmRepository;

    public function __construct(FilmRepository $filmRepository) 
    {
        $this->filmRepository = $filmRepository;
    }

    public function index() 
    {
        return response()->json($this->filmRepository->all());
    }
}
Publishing The Configuration

If you wish to override the path where the repositories and criteria live, publish the config file:

php artisan vendor:publish --provider="Dugajean\Repositories\Providers\RepositoryProvider"

Then simply open config/repositories.php and edit away!

Available Methods

The following methods are available:

Dugajean\Repositories\Contracts\RepositoryInterface
public function all($columns = ['*'])
public function lists($value, $key = null)
public function paginate($perPage = 1, $columns = ['*'], $method = 'full');
public function create(array $data)
// if you use mongodb then you'll need to specify primary key $attribute
public function update(array $data, $id, $attribute = 'id')
public function delete($id)
public function find($id, $columns = ['*'])
public function findBy($field, $value, $columns = ['*'])
public function findAllBy($field, $value, $columns = ['*'])
public function findWhere($where, $columns = ['*'])
Dugajean\Repositories\Contracts\CriteriaInterface
public function apply($model, Repository $repository)

Example usage

Create a new film in repository:

$this->filmRepository->create(Input::all());

Update existing film:

$this->filmRepository->update(Input::all(), $film_id);

Delete film:

$this->filmRepository->delete($id);

Find film by film_id;

$this->filmRepository->find($id);

you can also chose what columns to fetch:

$this->filmRepository->find($id, ['title', 'description', 'release_date']);

Get a single row by a single column criteria.

$this->filmRepository->findBy('title', $title);

Or you can get all rows by a single column criteria.

$this->filmRepository->findAllBy('author_id', $author_id);

Get all results by multiple fields

$this->filmRepository->findWhere([
    'author_id' => $author_id,
    ['year', '>', $year]
]);

Criteria

Criteria is a simple way to apply specific condition, or set of conditions to the repository query.

To create a Criteria class, run the following command:

php artisan make:criteria LengthOverTwoHours --model=Film

Here is a sample criteria:

<?php 

namespace App\Repositories\Criteria\Films;

use Dugajean\Repositories\Criteria\Criteria;
use Dugajean\Repositories\Contracts\RepositoryInterface;

class LengthOverTwoHours extends Criteria 
{
    /**
     * @param $model
     * @param RepositoryInterface $repository
     *                                       
     * @return Model
     */
    public function apply($model, RepositoryInterface $repository)
    {
        return $model->where('length', '>', 120);
    }
}

Now, inside you controller class you call pushCriteria method:

<?php 

namespace App\Http\Controllers;

use App\Repositories\FilmRepository;
use App\Repositories\Criteria\Films\LengthOverTwoHours;

class FilmsController extends Controller 
{
    /**
     * @var FilmRepository
     */
    private $filmRepository;

    public function __construct(FilmRepository $filmRepository) 
    {
        $this->filmRepository = $filmRepository;
    }

    public function index() 
    {
        $this->filmRepository->pushCriteria(new LengthOverTwoHours());
        
        return response()->json($this->filmRepository->all());
    }
}

Testing

$ vendor/bin/phpunit

License

Pouch is released under the MIT License.

laravel-repositories's People

Contributors

casperlaitw avatar dugajean avatar jdsingh avatar maartenpaauw avatar miclf avatar mirzap avatar petehouston avatar thangngoc89 avatar tjoosten avatar willianmano avatar wink- avatar xcaptain avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

laravel-repositories's Issues

Can't install with Laravel v6.9.0

Install with Laravel v6.9.0

I can't install it with the Laravel v6.9.0.

Steps to reproduce the issue

  1. composer require dugajean/repositories

What's the actual result?

Your requirements could not be resolved to an installable set of packages.

Problem 1
- Conclusion: don't install laravel/framework v6.12.0
- Conclusion: don't install laravel/framework v6.11.0
- Conclusion: don't install laravel/framework v6.10.1
- Conclusion: don't install laravel/framework v6.10.0
- Conclusion: don't install laravel/framework v6.9.0
- Conclusion: don't install laravel/framework v6.8.0
- Conclusion: don't install laravel/framework v6.7.0
- Conclusion: don't install laravel/framework v6.6.2
- Conclusion: don't install laravel/framework v6.6.1
- Conclusion: don't install laravel/framework v6.6.0
- Conclusion: don't install laravel/framework v6.5.2
- Conclusion: don't install laravel/framework v6.5.1
- Conclusion: don't install laravel/framework v6.5.0
- Conclusion: don't install laravel/framework v6.4.1
- Conclusion: don't install laravel/framework v6.4.0
- Installation request for dugajean/repositories ^0.1.0 -> satisfiable by dugajean/repositories[0.1].
- Conclusion: don't install laravel/framework v6.3.0
- Conclusion: don't install laravel/framework v6.2.0
- dugajean/repositories 0.1 requires illuminate/console ~5 -> satisfiable by illuminate/console[5.0.x-dev, 5.1.x-dev, 5.2.x-dev, 5.3.x-dev, 5.4.x-dev, 5.5.x-dev, 5.6.x-dev, 5.7.17, 5.7.18, 5.7.19, 5.7.x-dev, 5.8.x-dev, v5.0.0, v5.0.22, v5.0.25, v5.0.26, v5.0.28, v5.0.33, v5.0.4, v5.1.1, v5.1.13, v5.1.16, v5.1.2, v5.1.20, v5.1.22, v5.1.25, v5.1.28, v5.1.30, v5.1.31, v5.1.41, v5.1.6, v5.1.8, v5.2.0, v5.2.19, v5.2.21, v5.2.24, v5.2.25, v5.2.26, v5.2.27, v5.2.28, v5.2.31, v5.2.32, v5.2.37, v5.2.43, v5.2.45, v5.2.6, v5.2.7, v5.3.0, v5.3.16, v5.3.23, v5.3.4, v5.4.0, v5.4.13, v5.4.17, v5.4.19, v5.4.27, v5.4.36, v5.4.9, v5.5.0, v5.5.16, v5.5.17, v5.5.2, v5.5.28, v5.5.33, v5.5.34, v5.5.35, v5.5.36, v5.5.37, v5.5.39, v5.5.40, v5.5.41, v5.5.43, v5.5.44, v5.6.0, v5.6.1, v5.6.10, v5.6.11, v5.6.12, v5.6.13, v5.6.14, v5.6.15, v5.6.16, v5.6.17, v5.6.19, v5.6.2, v5.6.20, v5.6.21, v5.6.22, v5.6.23, v5.6.24, v5.6.26, v5.6.27, v5.6.28, v5.6.29, v5.6.3, v5.6.30, v5.6.31, v5.6.32, v5.6.33, v5.6.34, v5.6.35, v5.6.36, v5.6.37, v5.6.38, v5.6.39, v5.6.4, v5.6.5, v5.6.6, v5.6.7, v5.6.8, v5.6.9, v5.7.0, v5.7.1, v5.7.10, v5.7.11, v5.7.15, v5.7.2, v5.7.20, v5.7.21, v5.7.22, v5.7.23, v5.7.26, v5.7.27, v5.7.28, v5.7.3, v5.7.4, v5.7.5, v5.7.6, v5.7.7, v5.7.8, v5.7.9, v5.8.0, v5.8.11, v5.8.12, v5.8.14, v5.8.15, v5.8.17, v5.8.18, v5.8.19, v5.8.2, v5.8.20, v5.8.22, v5.8.24, v5.8.27, v5.8.28, v5.8.29, v5.8.3, v5.8.30, v5.8.31, v5.8.32, v5.8.33, v5.8.34, v5.8.35, v5.8.36, v5.8.4, v5.8.8, v5.8.9].
- don't install illuminate/console 5.0.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.1.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.2.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.3.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.4.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.5.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.6.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.7.17|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.7.18|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.7.19|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.7.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console 5.8.x-dev|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.22|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.25|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.26|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.33|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.0.4|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.1|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.13|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.16|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.2|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.20|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.22|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.25|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.30|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.31|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.41|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.6|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.1.8|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.19|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.21|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.24|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.25|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.26|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.27|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.31|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.32|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.37|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.43|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.45|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.6|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.2.7|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.3.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.3.16|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.3.23|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.3.4|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.13|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.17|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.19|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.27|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.36|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.4.9|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.16|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.17|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.2|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.33|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.34|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.35|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.36|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.37|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.39|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.40|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.41|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.43|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.5.44|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.1|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.10|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.11|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.12|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.13|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.14|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.15|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.16|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.17|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.19|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.2|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.20|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.21|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.22|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.23|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.24|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.26|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.27|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.29|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.3|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.30|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.31|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.32|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.33|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.34|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.35|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.36|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.37|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.38|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.39|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.4|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.5|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.6|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.7|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.8|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.6.9|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.1|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.10|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.11|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.15|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.2|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.20|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.21|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.22|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.23|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.26|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.27|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.3|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.4|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.5|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.6|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.7|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.8|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.7.9|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.0|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.11|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.12|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.14|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.15|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.17|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.18|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.19|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.2|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.20|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.22|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.24|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.27|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.28|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.29|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.3|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.30|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.31|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.32|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.33|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.34|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.35|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.36|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.4|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.8|don't install laravel/framework 6.x-dev
- don't install illuminate/console v5.8.9|don't install laravel/framework 6.x-dev
- Installation request for laravel/framework ^6.2 -> satisfiable by laravel/framework[6.x-dev, v6.10.0, v6.10.1, v6.11.0, v6.12.0, v6.2.0, v6.3.0, v6.4.0, v6.4.1, v6.5.0, v6.5.1, v6.5.2, v6.6.0, v6.6.1, v6.6.2, v6.7.0, v6.8.0, v6.9.0].

Installation failed, reverting ./composer.json to its original content.

PHPUnit Tests

It would be awesome to add some tests to this repo to ensure its functionality with different Laravel versions (incl. upcoming versions) etc.

Anyone interested: hit me up!

Change Introduction test

Issue description

Steps to reproduce the issue

What's the expected result?

What's the actual result?

Additional details / screenshot

  • Screenshot

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.