# 王者战队 - Laravel Repositories Laravel Repositories is a package for Laravel 5 which is used to abstract the database layer. This makes applications much easier to maintain. ## Installation ## composer.json 配置 在composer.json内追加以下配置,告诉composer.json我们需要走私有库 ```json "repositories": [ { "type": "composer", "url": "http://composer.ipx.mx" } ], "config": { "preferred-install": "dist", "disable-tls": true, "secure-http": false }, ``` Run the following command from you terminal: ```bash composer require "kz2/laravel-repositories" -vvv ``` or add this to require section in your composer.json file: ``` "kz2/laravel-repositories": "1.*" ``` then run ```composer update``` ## Usage First, create your repository class. Note that your repository class MUST extend ```KZ2\Laravel\Repositories\Eloquent\Repository``` and implement model() method ```php 'float' ]; } ``` And finally, use the repository in the controller: ```php film = $film; } public function index() { return \Response::json($this->film->all()); } } ``` ## Available Methods The following methods are available: ##### KZ2\Laravel\Repositories\Contracts\RepositoryInterface ```php public function all($columns = array('*')) public function lists($value, $key = null) public function paginate($perPage = 1, $columns = array('*')); 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 = array('*')) public function findBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*')) public function findWhere($where, $columns = array('*')) ``` ##### KZ2\Laravel\Repositories\Contracts\CriteriaInterface ```php public function apply($model, Repository $repository) ``` ### Example usage Create a new film in repository: ```php $this->film->create(Input::all()); ``` Update existing film: ```php $this->film->update(Input::all(), $film_id); ``` Delete film: ```php $this->film->delete($id); ``` Find film by film_id; ```php $this->film->find($id); ``` you can also chose what columns to fetch: ```php $this->film->find($id, ['title', 'description', 'release_date']); ``` Get a single row by a single column criteria. ```php $this->film->findBy('title', $title); ``` Or you can get all rows by a single column criteria. ```php $this->film->findAllBy('author_id', $author_id); ``` Get all results by multiple fields ```php $this->film->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. Your criteria class MUST extend the abstract ```KZ2\Laravel\Repositories\Criteria\Criteria``` class. Here is a simple criteria: ```php where('length', '>', 120); return $model; } } ``` Now, inside you controller class you call pushCriteria method: ```php film = $film; } public function index() { $this->film->pushCriteria(new LengthOverTwoHours()); return \Response::json($this->film->all()); } } ```