thirteen / 仓库
0.3.1
2015-09-14 06:15 UTC
Requires
- illuminate/container: ~5.1
- illuminate/database: ~5.1
- illuminate/pagination: ^5.1
Requires (Dev)
- fzaninotto/faker: ^1.5
- mockery/mockery: 0.9.*
- phpunit/phpunit: ~4.6
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。谢谢! :)