digajean/repositories

该包已被废弃,不再维护。未建议替代包。

Laravel 数据库仓库

0.2 2020-01-10 15:56 UTC

This package is auto-updated.

Last update: 2022-10-08 18:42:46 UTC


README

Build Status Latest Stable Version Total Downloads License

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 许可证下发布。