thirteen/仓库

仓库模式提供者。

0.3.1 2015-09-14 06:15 UTC

This package is not auto-updated.

Last update: 2020-08-07 19:49:43 UTC


README

Repositories 是一个易于在 Laravel 应用中设置仓库模式的包。

安装

Laravel 5.0

composer require "thirteen/repositories:0.1.*"

Laravel 5.1

composer require "thirteen/repositories:0.2.*"

更新你的 app.php 中的提供者

Thirteen\Repositories\RepositoriesServiceProvider::class

用法

你可以通过 Eloquent 仓库扩展你的仓库,以获取所有基本的 CRUD 功能。

查看实践以获得更简单的维护。

要使用这些方法,只需从 Abstract Repository 扩展并实现 model() 方法。

App\Repositories\UserRepository

namespace App\Repositories;

use App\Contracts\Repositories\UserRepsository as UserRepsositoryInterface;

class UserRepository extends Repository implements UserRepositoryInterface
{
	public function model()
	{
		return \App\User::class;
	}
}

这样,你就可以避免每次从头开始创建基本函数。

方法

从包中扩展一个接口,它将实现所有标准 Eloquent 功能

  • create(array $attributes)
  • all(array $columns = ['*'])
  • find($id, $columns = ['*'])
  • update($id, $columns = ['*'])
  • destroy($ids)

除此之外,你还可以获得一个 build 函数,简单来说,它使保存关系变得更容易。

$attributes = ['title' => 'First Post'];

$user = $userRepository->find(1);
$post = $postRepository->build($attributes);

$user->posts()->save($post);

或者你可以传递一个嵌套的属性数组来保存多个。

$attributes = [
	['title' => 'First Post'],
	['title' => 'Second Post'],
];

$user = $userRepository->find(1);
$posts = $postRepository->build($attributes);

$user->posts()->saveMany($posts);

实践

我强烈建议将接口和仓库扩展到你自己定义的抽象中,这样你仍然可以控制所有的仓库。

使用这种方法,你不需要扩展所有的类。所以这样会更方便。

App\Contracts\Repositories\RepositoryInterface

namespace App\Contracts\Repositories;

use Thirteen\Repositories\Contracts\RepositoryInterface as ThirteenRepository;

interface Repository extends ThirteenRepository
{
}

App\Repositories\Repository

namespace App\Repositories;

use Thirteen\Repositories\Eloquent\Repository as ThirteenRepository;

abstract class Repository extends ThirteenRepository
{
}

这样,你仍然可以添加自己的自定义命令,这些命令将应用于所有的子仓库。

待办事项

  • 创建一个 paginate 方法。
  • RepositoryInterface 重命名为 Repository

贡献

如果你想要贡献,请随意fork项目并提交pull requests。谢谢! :)