digajean / repositories
该包已被废弃,不再维护。未建议替代包。
Laravel 数据库仓库
0.2
2020-01-10 15:56 UTC
Requires
- php: ^7.2
- illuminate/console: ^5.4|^6.0
- illuminate/database: ^5.4|^6.0
- illuminate/filesystem: ^5.4|^6.0
- illuminate/support: ^5.4|^6.0
Requires (Dev)
- mockery/mockery: @stable
- phpunit/phpunit: ^8.3
This package is auto-updated.
Last update: 2022-10-08 18:42:46 UTC
README
Laravel Repositories 是一个用于 Laravel 5 的包,用于抽象数据库层。这使得应用程序更容易维护。
该包最初由 Bosnadev 创建,现在不再维护;因此,我决定接管此项目并确保其维护。
安装
在您的终端中运行以下命令
composer require dugajean/repositories
使用方法
首先,使用以下命令创建您的仓库类
php artisan make:repository Film
其中 Film
是现有模型的名字。如果模型不存在,它将为您生成。
最后,在控制器中使用仓库
<?php namespace App\Http\Controllers; use App\Repositories\FilmRepository; class FilmsController extends Controller { /** * @var FilmRepository */ private $filmRepository; public function __construct(FilmRepository $filmRepository) { $this->filmRepository = $filmRepository; } public function index() { return response()->json($this->filmRepository->all()); } }
发布配置
如果您想覆盖仓库和标准所在路径,请发布配置文件
php artisan vendor:publish --provider="Dugajean\Repositories\Providers\RepositoryProvider"
然后简单地打开 config/repositories.php
并进行编辑!
可用方法
以下方法可用
Dugajean\Repositories\Contracts\RepositoryInterface
public function all($columns = ['*']) public function lists($value, $key = null) public function paginate($perPage = 1, $columns = ['*'], $method = 'full'); public function create(array $data) // if you use mongodb then you'll need to specify primary key $attribute public function update(array $data, $id, $attribute = 'id') public function delete($id) public function find($id, $columns = ['*']) public function findBy($field, $value, $columns = ['*']) public function findAllBy($field, $value, $columns = ['*']) public function findWhere($where, $columns = ['*'])
Dugajean\Repositories\Contracts\CriteriaInterface
public function apply($model, Repository $repository)
示例用法
在仓库中创建新电影
$this->filmRepository->create(Input::all());
更新现有电影
$this->filmRepository->update(Input::all(), $film_id);
删除电影
$this->filmRepository->delete($id);
按 film_id 查找电影;
$this->filmRepository->find($id);
您还可以选择要获取哪些列
$this->filmRepository->find($id, ['title', 'description', 'release_date']);
通过单个列标准获取单行。
$this->filmRepository->findBy('title', $title);
或者,您可以通过单个列标准获取所有行。
$this->filmRepository->findAllBy('author_id', $author_id);
通过多个字段获取所有结果
$this->filmRepository->findWhere([ 'author_id' => $author_id, ['year', '>', $year] ]);
标准
标准是一种简单的方法,可以将特定的条件或条件集应用于仓库查询。
要创建标准类,请运行以下命令
php artisan make:criteria LengthOverTwoHours --model=Film
以下是一个示例标准
<?php namespace App\Repositories\Criteria\Films; use Dugajean\Repositories\Criteria\Criteria; use Dugajean\Repositories\Contracts\RepositoryInterface; class LengthOverTwoHours extends Criteria { /** * @param $model * @param RepositoryInterface $repository * * @return Model */ public function apply($model, RepositoryInterface $repository) { return $model->where('length', '>', 120); } }
现在,在您的控制器类中调用 pushCriteria 方法
<?php namespace App\Http\Controllers; use App\Repositories\FilmRepository; use App\Repositories\Criteria\Films\LengthOverTwoHours; class FilmsController extends Controller { /** * @var FilmRepository */ private $filmRepository; public function __construct(FilmRepository $filmRepository) { $this->filmRepository = $filmRepository; } public function index() { $this->filmRepository->pushCriteria(new LengthOverTwoHours()); return response()->json($this->filmRepository->all()); } }
测试
$ vendor/bin/phpunit
许可证
Pouch 在MIT 许可证下发布。