srgafanhoto / pattern-repository
与仓库一起工作的方式
0.1
2020-05-05 15:31 UTC
Requires
- php: >=5.6.4
- laravel/framework: ^5.4
This package is auto-updated.
Last update: 2024-09-06 01:19:12 UTC
README
安装
您可以通过 composer 安装此包
$ composer require srgafanhoto/pattern-repository
Laravel 5.4 或 5.3
将服务提供者添加到 config/app.php 中的 providers 数组
srgafanhoto\PatternRepository\RepositoryServiceProvider::class
这是发布配置文件的必需条件
发布配置文件
php artisan vendor:publish --provider="srgafanhoto\\PatternRepository\\RepositoryServiceProvider"
方法
srgafanhoto\PatternRepository\BaseRepository
公共方法
- all($columns = ['*'])
- lists($value, $key = null)
- find($id, $columns = ['*'])
- findAllBy($attribute, $value, $columns = ['*'])
- findBy($attribute, $value, $columns = ['*'])
- findMany(array $ids, $columns = ['*'])
- findOrFail($id, $columns = ['*'])
- findWhere(array $where, $columns = ['*'], $or = false)
- findWhereIn($field, array $values, $columns = ['*'])
- findWhereNotIn($field, array $values, $columns = ['*'])
受保护的方法
- saveModel(array $data)
- get($criteria = [], $columns = ['*'])
- first($criteria = [], $columns = ['*'])
- paginate($criteria = [], $perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
- simplePaginate($criteria = [], $perPage = null, $columns = ['*'], $pageName = 'page', $page = null)
- count($criteria = [], $columns = '*')
- matching($criteria)
- getModel()
- newInstance($attributes = [], $exists = false)
- newQuery()
- validate($validator, array $data)
srgafanhoto\PatternRepository\Criteria\Criteria
- 静态 create()
- 静态 expr($value)
- 静态 raw($value)
- select($columns = ['*'])
- selectRaw($expression, array $bindings = [])
- selectSub($query, $as)
- addSelect($column)
- distinct()
- from($table)
- join($table, $first, $operator = null, $second = null, $type = 'inner', $where = false)
- joinWhere($table, $first, $operator, $second, $type = 'inner')
- leftJoin($table, $first, $operator = null, $second = null)
- leftJoinWhere($table, $first, $operator, $second)
- rightJoin($table, $first, $operator = null, $second = null)
- rightJoinWhere($table, $first, $operator, $second)
- crossJoin($table, $first = null, $operator = null, $second = null)
- mergeWheres($wheres, $bindings)
- tap($callback)
- where($column, $operator = null, $value = null, $boolean = 'and')
- orWhere($column, $operator = null, $value = null)
- whereColumn($first, $operator = null, $second = null, $boolean = 'and')
- orWhereColumn($first, $operator = null, $second = null)
- whereRaw($sql, $bindings = [], $boolean = 'and')
- orWhereRaw($sql, array $bindings = [])
- whereIn($column, $values, $boolean = 'and', $not = false)
- orWhereIn($column, $values)
- whereNotIn($column, $values, $boolean = 'and')
- orWhereNotIn($column, $values)
- whereNull($column, $boolean = 'and', $not = false)
- orWhereNull($column)
- whereNotNull($column, $boolean = 'and')
- whereBetween($column, array $values, $boolean = 'and', $not = false)
- orWhereBetween($column, array $values)
- whereNotBetween($column, array $values, $boolean = 'and')
- orWhereNotBetween($column, array $values)
- orWhereNotNull($column)
- whereDate($column, $operator, $value = null, $boolean = 'and')
- orWhereDate($column, $operator, $value)
- whereTime($column, $operator, $value, $boolean = 'and')
- orWhereTime($column, $operator, $value)
- whereDay($column, $operator, $value = null, $boolean = 'and')
- whereMonth($column, $operator, $value = null, $boolean = 'and')
- whereYear($column, $operator, $value = null, $boolean = 'and')
- whereNested(Closure $callback, $boolean = 'and')
- addNestedWhereQuery($query, $boolean = 'and')
- whereExists(Closure $callback, $boolean = 'and', $not = false)
- orWhereExists(Closure $callback, $not = false)
- whereNotExists(Closure $callback, $boolean = 'and')
- orWhereNotExists(Closure $callback)
- addWhereExistsQuery(Builder $query, $boolean = 'and', $not = false)
- dynamicWhere($method, $parameters)
- groupBy()
- having($column, $operator = null, $value = null, $boolean = 'and')
- orHaving($column, $operator = null, $value = null)
- havingRaw($sql, array $bindings = [], $boolean = 'and')
- orHavingRaw($sql, array $bindings = [])
- orderBy($column, $direction = 'asc')
- orderByDesc($column)
- latest($column = 'created_at')
- oldest($column = 'created_at')
- inRandomOrder($seed = '')
- orderByRaw($sql, $bindings = [])
- skip($value)
- offset($value)
- take($value)
- limit($value)
- forPage($page, $perPage = 15)
- forPageAfterId($perPage = 15, $lastId = 0, $column = 'id')
- union($query, $all = false)
- unionAll($query)
- lock($value = true)
- lockForUpdate()
- sharedLock()
- when($value, $callback, $default = null)
- unless($value, $callback, $default = null)
- whereKey($id)
- whereKeyNot($id)
- with($relations)
- without($relations)
- setQuery($query)
- setModel(Model $model)
- has($relation, $operator = '>=', $count = 1, $boolean = 'and', Closure $callback = null)
- orHas($relation, $operator = '>=', $count = 1)
- doesntHave($relation, $boolean = 'and', Closure $callback = null)
- whereHas($relation, Closure $callback = null, $operator = '>=', $count = 1)
- orWhereHas($relation, Closure $callback = null, $operator = '>=', $count = 1)
- whereDoesntHave($relation, Closure $callback = null)
- withCount($relations)
- mergeConstraintsFrom(Builder $from)
- withTrashed()
- withoutTrashed()
- onlyTrashed()
PatternRepository 自定义条件
- fromRequest($fieldsSearchable = [])
- whereDateFormat($column, $operator, $value, $format = 'd/m/Y')
- orWhereDateFormat($column, $operator, $value, $format = 'd/m/Y')
使用说明
Eloquent
创建模型
通常创建模型,但重要的是要定义可以从输入表单数据填充的属性。
namespace App; use Illuminate\Database\Eloquent\Model; class Post extends Model { protected $fillable = [ 'title', 'author', ]; }
创建仓库
namespace App\Domains\Module\Repository; use App\Post; use srgafanhoto\PatternRepository\BaseRepository; use srgafanhoto\PatternRepository\Criteria\Criteria; use App\Domains\Module\Validators\UserValidation; class PostRepository extends BaseRepository { protected function model() { return Post::class; } }
控制器
namespace App\Http\Controllers; use App\Repositories\Contracts\PostRepository; class PostsController extends Controller { protected $repository; public function __construct(PostRepository $repository) { $this->repository = $repository; } }
方法示例
在仓库中查找所有结果
$posts = $this->repository->all();
按ID查找结果
$post = $this->repository->find($id);
按条件查找
使用条件
条件支持所有 Eloquent 函数
从请求条件
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = Criteria::create() ->fromRequest(); $this->repository->get($criteria); $this->repository->paginate($criteria);
单个条件
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = Criteria::create() ->select('*') ->where('author', '=', 'author') ->orWhere('title', '=', 'title') ->orderBy('author', 'asc'); $this->repository->get($criteria); $this->repository->paginate($criteria);
多个条件
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = []; $criteria[] = Criteria::create() ->orderBy('author', 'asc'); $criteria[] = Criteria::create() ->where('author', '=', 'author') ->orWhere('title', '=', 'title'); $this->repository->get($criteria); // $this->repository->paginate($criteria);
与
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = Criteria::create() ->with('author', function($criteria) { $criteria->where('author', 'author'); }); $this->repository->get($criteria); // $this->repository->paginate($criteria);
连接
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = Criteria::create() ->join('author', function ($criteria) { $criteria->on('posts.author_id', '=', 'author.id'); }); $this->repository->get($criteria); // $this->repository->paginate($criteria);
表达式
use srgafanhoto\PatternRepository\Criteria\Criteria; $criteria = Criteria::create() ->where('created_at', '<=', Criteria::expr('NOW()')); $this->repository->get($criteria); // $this->repository->paginate($criteria);
自定义条件
use srgafanhoto\PatternRepository\Criteria\Criteria; class CustomCriteria extends Criteria { public function __construct($id) { $this->where('id', '=', $id); } } $this->repository->get((new CustomCriteria(1))->where('autor', 'autor'));
待办事项
- 缓存