forecho/laravel-repository

Laravel的基础仓库实现

v1.1.0 2024-03-02 14:26 UTC

This package is auto-updated.

Last update: 2024-08-31 00:41:27 UTC


README

Latest Version on Packagist Total Downloads GitHub Actions

该Laravel仓库包旨在成为一个通用的Laravel仓库实现。

安装

您可以通过composer安装此包

composer require forecho/laravel-repository

用法

创建一个仓库类

<?php 
namespace App\Repositories;

use App\Models\Post;
use Forecho\LaravelRepository\Repository;

class PostRepository extends Repository
{
    // Optional
    public array $partialMatchAttributes = ['title'];

    // Optional
    public array $defaultOrder = ['created_at' => 'desc'];
    
    // Optional
    public array $booleanAttributes = ['status'];

    public string $modelClass = Post::class;

    // Optional
    public function boot()
    {
        $this->pushCriteria(UserCriteriaCriteria::class);
    }

}

在控制器中使用仓库

<?php
namespace App\Http\Controllers;

use App\Repositories\PostRepository;
use Illuminate\Http\Request;
use App\Http\Resources\UserResource;

class UserController extends Controller
{
    protected PostRepository $repository;

    public function __construct(PostRepository $accountRepository)
    {
        $this->repository = $accountRepository;
    }
   
    public function index(Request $request, PostRepository $userRepository)
    {
        $posts = $this->repository->search($request->all())->paginate();
        // $posts = $this->repository->with(['user'])->search($request->all())->paginate();
        
        return response()->json(UserResource::collection($posts);
    }
}

标准

创建一个标准类

<?php
namespace App\Criteria;

use App\Services\UserService;
use Forecho\LaravelRepository\Contracts\CriteriaInterface;
use Forecho\LaravelRepository\Contracts\RepositoryInterface;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;

class UserCriteriaCriteria implements CriteriaInterface
{
    /**
     * Apply criteria in query repository
     *
     * @param  Builder|Model  $model
     * @param  RepositoryInterface  $repository
     * @return mixed
     */
    public function apply($model, RepositoryInterface $repository): mixed
    {
        return $model->where('user_id', UserService::getUserId());
    }
}

通过请求获取所有数据,不进行过滤

http://127.0.0.1:8000/api/posts

[
    {
        "id": 1,
        "title": "title",
        "content": "content",
        "status": 0,
        "created_at": "2021-08-01T07:00:00.000000Z",
        "updated_at": "2021-08-01T07:00:00.000000Z"
    },
    {
        "id": 2,
        "title": "for echo",
        "content": "content",
        "status": 1,
        "created_at": "2021-08-01T07:00:00.000000Z",
        "updated_at": "2021-08-01T07:00:00.000000Z"
    }
]

http://127.0.0.1:8000/api/posts?title=for

[
    {
        "id": 2,
        "title": "for echo",
        "content": "content",
        "status": 1,
        "created_at": "2021-08-01T07:00:00.000000Z",
        "updated_at": "2021-08-01T07:00:00.000000Z"
    }
]

http://127.0.0.1:8000/api/posts?status=0

[
    {
        "id": 1,
        "title": "title",
        "content": "content",
        "status": 0,
        "created_at": "2021-08-01T07:00:00.000000Z",
        "updated_at": "2021-08-01T07:00:00.000000Z"
    }
]

http://127.0.0.1:8000/api/posts?title=for&status=0

[]

测试

composer test

变更日志

请参阅变更日志以获取更多关于最近更改的信息。

贡献

请参阅贡献指南以获取详细信息。

安全

如果您发现任何安全相关的问题,请发送电子邮件至caizhenghai@gmail.com,而不是使用问题跟踪器。

鸣谢

许可

MIT许可(MIT)。请参阅许可文件以获取更多信息。

Laravel Package Boilerplate

此包是使用Laravel Package Boilerplate生成的。