srgafanhoto/pattern-repository

与仓库一起工作的方式

0.1 2020-05-05 15:31 UTC

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'));

待办事项

  • 缓存