samkitano/repository

Laravel 5.2 的仓储模式

v0.0.2 2016-07-04 13:56 UTC

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());
    }
}

致谢

Bosnadev/Repositories

由 @andersao 开发的优秀包。 这里 是我作为参考使用的另一个包。

Shawn McCool 的文章

Jeffrey Way 在 Laracasts 上的课程

许可证

MIT 许可证