samkitano / repository
Laravel 5.2 的仓储模式
v0.0.2
2016-07-04 13:56 UTC
Requires
- php: >=5.4.0
- illuminate/database: 5.*
- illuminate/support: 5.*
Requires (Dev)
- mockery/mockery: dev-master@dev
This package is not auto-updated.
Last update: 2024-09-14 19:25:38 UTC
README
这是基于这篇优秀的博客文章的实现,作者是 Bosnadev。
基于 Bosnadev/Repositories,进行了一些小的修改,主要符合PSR-2规范。
你应该阅读这篇文章,自己动手实践,因为 仓储模式 是正确实现任何中型/大型应用数据访问层的一个重要概念。
注意
如上所述,此包是我为个人项目和测试对 Bosniadev 的实现。
因此,目前你最好使用 该包 而不是这个包,并遵循其说明。
安装
composer require "samkitano/repository"
用法
<?php namespace App\Repositories; use Kitano\Repository\Contracts\RepositoryInterface; use Kitano\Repository\Eloquent\Repository; class UseRepository extends Repository { public function model() { return 'App\User'; } }
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { protected $primaryKey = 'user_id'; protected $table = 'users'; protected $casts = [ "verified" => 'boolean' ]; }
<?php namespace App\Http\Controllers; use App\Repositories\UsersRepository as User; class UsersController extends Controller { protected $user; public function __construct(User $user) { $this->user = $user; } public function index() { return response()->json($this->user->all()); } }
可用方法
以下方法可用
Kitano\Repository\Contracts\RepositoryInterface
public function all($columns = array('*')) public function lists($value, $key = null) public function paginate($perPage = 1, $columns = array('*')); public function create(array $data) public function update(array $data, $id, $attribute = "id") public function delete($id) public function find($id, $columns = array('*')) public function findBy($field, $value, $columns = array('*')) public function findAllBy($field, $value, $columns = array('*')) public function findWhere($where, $columns = array('*'))
Kitano\Repository\Contracts\CriteriaInterface
public function apply($model, Repository $repository)
示例用法
在仓储中创建新用户
$this->user->create($input);
更新现有用户
$this->user->update($input, $user_id);
删除用户
$this->user->delete($id);
按 user_id 查找用户;
$this->user->find($id);
你也可以选择要获取哪些列
$this->user->find($id, ['name', 'email', 'created_at']);
通过单个列标准获取单行。
$this->user->findBy('email', $email);
或者你可以通过单个列标准获取所有行。
$this->user->findAllBy('active', true);
通过多个字段获取所有结果
$this->user->findWhere([ 'active' => true, ['created_at', '>', Carbon::yesterday()] ]);
标准
<?php namespace App\Repositories\Criteria\Users; use Carbon\Carbon; use Kitano\Repository\Criteria\Criteria; use Kitano\Repository\Contracts\RepositoryInterface as Repository; class RegisteredToday extends Criteria { /** * @param $model * @param RepositoryInterface $repository * @return mixed */ public function apply($model, Repository $repository) { $yesterday = Carbon::yesterday(); $model = $model->where('created_at', '>', $yesterday); return $model; } }
<?php namespace App\Http\Controllers; use App\Repositories\Criteria\Users\RegisteredToday; use App\Repositories\UsersRepository as User; class UsersController extends Controller { /** * @var User */ protected $user; public function __construct(User $user) { $this->user = $user; } public function index() { $this->user->addCriteria(new RegisteredToday()); return response()->json($this->user->all()); } }
致谢
此 由 @andersao 开发的优秀包。 这里 是我作为参考使用的另一个包。
此 Shawn McCool 的文章
此 Jeffrey Way 在 Laracasts 上的课程