请求查询过滤
# 自定义 Criteria 过滤器
php artisan make:criteria My
# 在 app/Criteria 目录下创建 model 查询过滤器
# 当前控制器 唯一方法 apply() 方法 过滤model查询结果
<?php
namespace App\Criteria;
use Prettus\Repository\Contracts\CriteriaInterface;
use Prettus\Repository\Contracts\RepositoryInterface;
/**
* Class MyCriteria
* @package namespace App\Criteria;
*/
class MyCriteria implements CriteriaInterface
{
/**
* Apply criteria in query repository
*
* @param $model
* @param RepositoryInterface $repository
*
* @return mixed
*/
public function apply($model, RepositoryInterface $repository)
{
$model = $model->where('name','=','小河');
return $model;
}
}
# apply() 方法存在两参数 都是自动注入的(不需要手动传入)
# $model :第一个参数 参数当前$this->repository注入的model实例对象
# $repository :第二个参数 当前repository的一个实例,便于执行必要的查询
# 返回值:需要返回一个 $model 当前的模型实例对象
--
--
- 加载一个 Criteria 过滤器
# 在指定控制器中 添加如下代码
//> 加载扩展包自定义的过滤机制
$this->repository->pushCriteria( app('Prettus\Repository\Criteria\RequestCriteria') );
$this->repository->pushCriteria( MyCriteria::class ); //> 加载自定义过滤机制
--
--
- 移除一个 Criteria 过滤器
# 比如移除指定的 MyCriteria 过滤
$this->repository->popCriteria( MyCriteria::class );
--
--
- getByCriteria() 方法加载对应过滤并获取当前查询的结果
# 参看 getByCritera() 方法源码
public function getByCriteria( CriteriaInterface $criteria )
{
//> 加载过滤机制
$this->model = $criteria->apply( $this->model, $this );
//> 获取当前查询数据 get() 方法形式
$results = $this->model->get();
//> 重置model
$this->resetModel();
//> 返回筛选的字段结果 参考 Presenters 的用法
return $this->parserResult( $results );
}
-
--
-
--
- shipCriteria($status=true):跳过pushCriteria函数加载的所有Criteria的所有过滤机制
# 跳过所有的Criteria过滤 获取当前查询出来的结果
$datum = $this->repository->skipCriteria()->all();
--
--
- I5自带的 RequestCriteria 过滤
# app/repository.php 配置文件 Criteria 配置项
'criteria' => [
/*
|--------------------------------------------------------------------------
| 译:Criteria 允许的筛选条件
|--------------------------------------------------------------------------
|
| 'acceptedConditions'=>['=','like']
|
| $query->where('foo','=','bar')
| $query->where('foo','like','bar')
|
*/
'acceptedConditions' => [
'=','like','>','<','>=','<=','<>'
],
/*
|--------------------------------------------------------------------------
| Request Params
|--------------------------------------------------------------------------
|
| Request parameters that will be used to filter the query in the repository
|
| Params :
|
| - search : Searched value
| Ex: http://prettus.local/?search=lorem
|
| - searchFields : Fields in which research should be carried out
| Ex:
| http://prettus.local/?search=lorem&searchFields=name;email
| http://prettus.local/?search=lorem&searchFields=name:like;email
| http://prettus.local/?search=lorem&searchFields=name:like
|
| - filter : Fields that must be returned to the response object
| Ex:
| http://prettus.local/?search=lorem&filter=id,name
|
| - orderBy : Order By
| Ex:
| http://prettus.local/?search=lorem&orderBy=id
|
| - sortedBy : Sort
| Ex:
| http://prettus.local/?search=lorem&orderBy=id&sortedBy=asc
| http://prettus.local/?search=lorem&orderBy=id&sortedBy=desc
|
*/
'params' => [
'search' => 'search', //> 搜索字段
'searchFields' => 'searchFields',//> 搜索字段自定义匹配条件
'filter' => 'filter', //> 查询字段(field)
'orderBy' => 'orderBy', //> 排序字段(orderBy)
'sortedBy' => 'sortedBy', //> 排序方式(desc|asc)
'with' => 'with' //> 懒加载形式
]
],
网友评论