m2quared/eloquent-depot

数据库层仓库

v5.0.0 2020-11-02 16:18 UTC

This package is auto-updated.

Last update: 2024-08-29 04:03:35 UTC


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)