prettus / laravel-repository
Requires
- php: >=5.4.0
- prettus/laravel-validation: 1.0.*
This package is auto-updated.
Last update: 2019-09-03 21:03:18 UTC
README
###此包已被弃用且不再维护。作者建议使用https://github.com/andersao/l5-repository包。
Laravel 4 - 存储库
Laravel 4 存储库用于抽象数据层,使我们的应用更容易维护。
安装
在您的composer.json中添加此行:"prettus/laravel-repository": "2.0.*"。
"require": { "prettus/laravel-repository": "2.0.*" }
执行composer update
将此添加到app/config/app.php的服务提供者数组中
'Prettus\Repository\RepositoryServiceProvider',
发布配置
php artisan config:publish prettus/laravel-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()
条件
- apply($query)
用法
创建模型
正常创建模型,但定义可以从输入表单数据填充的属性很重要。
class Post extends Eloquent { // or Ardent, Or any other Model Class protected $fillable = [ 'title', 'author', ... ]; ... }
创建存储库
use Prettus\Repository\Eloquent\Repository; class PostRepository extends Repository { public function __construct(Post $model) { parent::__construct($model); } }
使用方法
class PostsController extends BaseController { /** * @var PostRepository */ protected $repository; public function __construct(PostRepository $repository){ $this->repository = $repository; } .... }
在存储库中查找所有结果
$posts = $this->repository->all();
使用分页在存储库中查找所有结果
$posts = $this->repository->paginate($limit = null, $columns = ['*']);
通过ID查找结果
$post = $this->repository->find($id);
在存储库中创建新条目
$post = $this->repository->create( Input::all() );
更新存储库中的条目
$post = $this->repository->update( Input::all(), $id );
在存储库中删除条目
$this->repository->delete($id)
创建条件
条件是一种根据需求应用特定条件来更改查询存储库的方式。您可以在存储库中添加多个条件
class MyCriteria implements \Prettus\Repository\Contracts\Criteria { public function apply($query) { $query = $query->where('user_id','=', Auth::user()->id ); return $query; } }
在控制器中使用条件
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(); ... } }
从条件获取结果
$posts = $this->repository->getByCriteria(new MyCriteria());
在存储库中设置条件的默认值
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()); ... } }
跳过存储库中定义的条件
在存储库的任何方法之前使用skipCriteria
$posts = $this->repository->skipCriteria()->all();
使用请求条件
请求条件是标准条件实现。它允许从请求中发送的参数执行存储库中的筛选操作。
您可以执行动态搜索,过滤数据并自定义查询
要在您的存储库中使用条件,您可以在存储库的启动方法中添加一个新条件,或者直接在控制器中使用,以便过滤出少量请求
####在您的存储库中启用
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')); ... } }
请记住,您需要定义哪些模型字段可搜索。
在您的存储库中将 $fieldSearchable 设置为可搜索的字段。
protected $fieldSearchable = [ 'name', 'email' ];
您可以设置用于执行查询的条件类型,默认条件是 "="
protected $fieldSearchable = [ 'name'=>'like', 'email', // Default Condition "=" 'your_field'=>'condition' ];
####在您的控制器中启用
public function index() { $this->repository->pushCriteria(app('Prettus\Repository\Criteria\RequestCriteria')); $posts = $this->repository->all(); ... }
条件示例
通过请求不进行过滤请求所有数据
[ { "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" } ]
在存储库中进行研究
http://prettus.local/users?search=Anderson%20Andrade
或
http://prettus.local/users?search=Anderson&searchFields=name:like
或
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" } ]
过滤字段
http://prettus.local/users?filter=id;name
[ { "id": 1, "name": "Anderson Andrade" }, { "id": 2, "name": "Lorem Ipsum" }, { "id": 3, "name": "Laravel" } ]
排序结果
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" } ]
####重写参数名称
您可以在配置文件 config/repository-criteria.php 中更改参数的名称
作者
Anderson Andrade - contato@andersonandra.de