herojhc / laravel-repository
Laravel 仓库
2.2.6
2020-07-02 10:01 UTC
Requires
- php: >=7.1
- illuminate/config: ~5.5|~6.0|~7.0
- illuminate/console: ~5.5|~6.0|~7.0
- illuminate/database: ~5.5|~6.0|~7.0
- illuminate/filesystem: ~5.5|~6.0|~7.0
- illuminate/http: ~5.5|~6.0|~7.0
- illuminate/support: ~5.5|~6.0|~7.0
Requires (Dev)
- mockery/mockery: dev-master@dev
- phpunit/phpunit: ^5.7|^7.0
README
- l5-repository simple
安装
Composer
执行以下命令以获取包的最新版本
composer require herojhc/laravel-repository
Laravel
>= laravel5.5
ServiceProvider 将自动附加
其他
在你的 config/app.php 中,将 Herojhc\Repositories\Providers\RepositoryServiceProvider::class 添加到 providers 数组的末尾
'providers' => [ ... Herojhc\Repositories\Providers\RepositoryServiceProvider::class, ],
如果使用 Lumen
$app->register(Herojhc\Repositories\Providers\LumenRepositoryServiceProvider::class);
发布配置
php artisan vendor:publish --provider "Herojhc\Repositories\Providers\RepositoryServiceProvider"
方法
Herojhc\Repositories\Contracts\RepositoryInterface
- all($columns = array('*'))
- first($columns = array('*'))
- paginate($limit = null, $columns = ['*'])
- find($id, $columns = ['*'])
- findBy($field, $value, $columns = ['*'])
- findWhere(array $where, $columns = ['*'])
- findWhereIn($field, array $where, $columns = [*])
- findWhereNotIn($field, array $where, $columns = [*])
- create(array $attributes)
- update(array $attributes, $id)
- updateOrCreate(array $attributes, array $values = [])
- delete($id)
- deleteWhere(array $where)
- orderBy($column, $direction = 'asc');
- with(array $relations);
- has(string $relation);
- whereHas(string $relation, closure $closure);
- hidden(array $fields);
- visible(array $fields);
- scopeQuery(Closure $scope);
- getFieldsSearchable();
Herojhc\Repositories\Contracts\CriteriaInterface
- pushCriteria($criteria)
- popCriteria($criteria)
- getCriteria()
- getByCriteria(CriteriaInterface $criteria)
- skipCriteria($status = true)
- getFieldsSearchable()
用法
创建模型
按照常规创建模型,但重要的是要定义可以从输入表单数据中填充的属性。
namespace App; class Post extends Eloquent { // or Ardent, Or any other Model Class protected $fillable = [ 'title', 'author', ... ]; ... }
创建仓库
namespace App; use Herojhc\Repositories\Eloquent\BaseRepository; class PostRepository extends BaseRepository { /** * Specify Model class name * * @return string */ function model() { return "App\\Post"; } }
创建标准
使用命令
php artisan make:criteria My
标准是一种通过应用特定条件来更改查询仓库的方法,根据您的需求。您可以在您的仓库中添加多个标准。
use Herojhc\Repositories\Contracts\RepositoryInterface; use Herojhc\Repositories\Criteria\Criteria; class MyCriteria extend Criteria { public function apply($model, RepositoryInterface $repository) { $model = $model->where('user_id','=', Auth::user()->id ); return $model; } }
在控制器中使用标准
namespace App\Http\Controllers; use App\PostRepository; class PostsController extends BaseController { /** * @var PostRepository */ protected $repository; public function __construct(PostRepository $repository){ $this->repository = $repository; } public function index() { $this->repository->pushCriteria(new MyCriteria1()); $this->repository->pushCriteria(MyCriteria2::class); $posts = $this->repository->all(); ... } }