manchenkoff/laravel-repositories

为您的 Laravel 应用程序实现仓库模式

v0.0.6 2024-03-16 09:33 UTC

This package is auto-updated.

Last update: 2024-09-24 22:56:52 UTC


README

Packagist Version Packagist Downloads Packagist License Packagist Dependency Version

该软件包提供了基于 artisan 命令的基本仓库模式实现,用于生成类。

功能

  • Repository 类具有基本方法,如 allfindcreateupdatedelete
  • 泛型类型注释以通过 PHPStan 检查
  • Artisan make:repository 命令用于生成具有模型和接口的仓库类

安装

要安装此软件包,您首先需要安装 Composer,然后在终端中运行

composer require manchenkoff/laravel-repositories

或在 composer.json 中添加此行

"manchenkoff/laravel-repositories": "*"

然后运行 composer update

软件包应自动在您的应用程序中注册其服务提供者,但您也可以在 config/app.php 中手动完成

'providers' => ServiceProvider::defaultProviders()
    ->merge([
        // Package Service Providers
        \Manchenkoff\Laravel\Repositories\ServiceProvider::class,

        // Application Service Providers
        // ...
    ])
    ->toArray(),

使用方法

首先,您需要为您的仓库创建一个模型类。您可以手动创建或使用 artisan 命令

php artisan make:model Post

然后您可以创建一个用于您的模型的仓库类

# repository name - PostRepository
# model name - Post
php artisan make:repository PostRepository Post

此命令将在 app/Repositories 目录中创建一个仓库类,并在 app/Contracts/Repositories 中创建一个 PostRepositoryInterface 合约类。

现在您可以在服务中使用现有方法或扩展自定义功能

<?php

namespace App\Services;

use Illuminate\Database\Eloquent\Collection;
use App\Contracts\Repositories\PostRepositoryInterface;
use App\Contracts\Services\PostServiceInterface;

final class PostService implements PostServiceInterface
{
    private readonly PostRepositoryInterface $repository;

    public function __construct(PostRepositoryInterface $repository)
    {
        $this->repository = $repository;
    }

    public function getAllPosts(): Collection
    {
        return $this->repository->all();
    }
}

实现

所有仓库方法都使用受保护的 query() 方法来获取 Eloquent.Builder 实例。您可以在您的仓库类中重写此方法以添加自定义逻辑,例如,当您始终需要加载某些关系或应用自定义排序时。

protected function query(): Builder
{
    return parent::query()->with('comments')->orderBy('created_at', 'desc');
}

以下是可用方法的列表及其简要描述

您可能还需要根据需要调整类模板。您可以通过发布软件包视图来完成此操作

php artisan vendor:publish --provider="Manchenkoff\Laravel\Repositories\ServiceProvider"

开发

此软件包是完全开源的,因此欢迎任何贡献!

将此存储库克隆到您的本地计算机,安装依赖关系并运行测试

git clone https://github.com/manchenkoff/laravel-repositories
cd laravel-repositories
composer install
composer test

有一些有用的 composer 脚本