m2quared / eloquent-depot
数据库层仓库
v5.0.0
2020-11-02 16:18 UTC
Requires
- illuminate/config: ^5.0|^6.0|^7.0|^8.0
- illuminate/console: ^5.0|^6.0|^7.0|^8.0
- illuminate/database: ^5.0|^6.0|^7.0|^8.0
- illuminate/filesystem: ^5.0|^6.0|^7.0|^8.0
- illuminate/http: ^5.0|^6.0|^7.0|^8.0
- illuminate/pagination: ^5.0|^6.0|^7.0|^8.0
- illuminate/support: ^5.0|^6.0|^7.0|^8.0
README
Eloquent Depot 用于抽象数据层,使我们的应用程序更易于维护。
目录
安装
Composer
执行以下命令以获取包的最新版本
composer require m2quared/l5-repository
Laravel
在您的 config/app.php
中,将 M2quared\Repository\Providers\RepositoryServiceProvider::class
添加到 providers
数组的末尾
'providers' => [ ... M2quared\Repository\Providers\RepositoryServiceProvider::class, ],
如果使用 Lumen
$app->register(M2quared\Repository\Providers\LumenRepositoryServiceProvider::class);
发布配置
php artisan vendor:publish
方法
M2quared\Repository\Contracts\RepositoryInterface
- all($columns = array('*'))
- first($columns = array('*'))
- paginate($limit = null, $columns = ['*'])
- find($id, $columns = ['*'])
- findByField($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)
- orderBy($column, $direction = 'asc');
- with(array|string $relations);
- withCount(array|string $relations)
- limit($value)
- hidden(array $fields);
- visible(array $fields);
- scopeQuery(Closure $scope);
- getFieldsSearchable();
- setPresenter($presenter);
- skipPresenter($status = true);
用法
创建模型
正常创建模型,但定义可以由输入表单数据填充的属性很重要。
namespace App; class Post extends Eloquent { // or Ardent, Or any other Model Class protected $fillable = [ 'title', 'author', ... ]; ... }
创建仓库
namespace App; use M2quared\Repository\Eloquent\BaseRepository; class PostRepository extends BaseRepository { /** * Specify Model class name * * @return string */ function model() { return "App\\Post"; } }
使用方法
namespace App\Http\Controllers; use App\PostRepository; 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->hidden(['country_id'])->find($id);
仅显示模型的特定属性
$post = $this->repository->visible(['id', 'state_id'])->find($id);
加载模型关系
$post = $this->repository->with(['state'])->find($id);
通过字段名称查找结果
$posts = $this->repository->findByField('country_id','15');
通过多个字段查找结果
$posts = $this->repository->findWhere([ //Default Condition = 'state_id'=>'10', 'country_id'=>'15', //Custom Condition ['columnName','>','10'] ]);
通过一个字段中的多个值查找结果
$posts = $this->repository->findWhereIn('id', [1,2,3,4,5]);
通过一个字段中排除多个值查找结果
$posts = $this->repository->findWhereNotIn('id', [6,7,8,9,10]);
使用自定义范围查找所有结果
$posts = $this->repository->scopeQuery(function($query){ return $query->orderBy('sort_order','asc'); })->all();
在仓库中创建新条目
$post = $this->repository->create( Input::all() );
更新仓库中的条目
$post = $this->repository->update( Input::all(), $id );
删除仓库中的条目
$this->repository->delete($id)