eup/base-repo

Laravel 的基础仓库实现

dev-master 2022-05-04 07:03 UTC

This package is auto-updated.

Last update: 2024-09-04 12:00:35 UTC


README

要开始使用 基础仓库,请使用 Composer 将包添加到项目的依赖项中

    composer require eup/base-repo

配置

Laravel 5.5+

Laravel 使用包自动发现,因此不需要您手动添加 ServiceProvider。

Laravel < 5.5

如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php 文件中的 providers 数组中

'providers' => [
    // Other service providers...

    Base\RepositoryServiceProvider::class,
],

基本用法

接下来,您准备好使用仓库。如果您想要创建与模型对应的仓库(例如:UserRepository),请运行命令行

php artisan make:repo UserRepository -i

运行此命令后,包将自动在 Repository 目录中生成两个文件:UserRepository 和 UserRepositoryInterface。UserRepository 继承自 AbstractRepository,因此您可以使用 AbstractRepository 中的方法

<?php

namespace App\Repositories;

use App\Models\User;
use Base\Repository\AbstractRepository;
use App\Repositories\Contracts\UserRepositoryInterface;

class UserRepository extends AbstractRepository implements UserRepositoryInterface
{
    protected $model;

    /**
     * UserRepository construct
     *
     * @param  mixed $model
     *
     * @return void
     */
    public function __construct(User $model)
    {
        parent::__construct($model);
    }
}

在 AppServiceProvider 中注册

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Repositories\UserRepository;
use App\Repositories\Contracts\UserRepositoryInterface;


class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        //
    }

    /**
     * Register any application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind(UserRepositoryInterface::class, UserRepository::class);
    }
}

获取用户详情

在控制器中,您想通过 ID 使用仓库查找用户

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Repositories\Contracts\UserRepositoryInterface;

class UserController extends Controller
{
    /**
     * @var UserRepositoryInterface
     */
    private $userRepository;

    public function __construct(UserRepositoryInterface $userRepository )
    {
        $this->userRepository = $userRepository;
    }

    public function show($id) 
    {

        $user = $this->userRepository->findById($id);

        return response()->json($user);
    }
}

基础仓库中的所有函数

    public function find(array $conditions = []);
    public function findOne(array $conditions);
    public function findById(int $id);
    public function create(array $attributes);
    public function update(Model $model, array $attributes = []);
    public function save(Model $model);
    public function delete(Model $model);
    public function get($query);
    public function destroy(array $ids);
    public function findCount(array $conditions);
    public function toBase($query);
    public function updateMultiple(Builder $query, array $attributes = []);
    public function updateOrCreate(array $attributes, array $values);
    public function findAll();
    public function findByIds(array $ids);
    public function model();
    public function makeModel();
    public function resetModel();