hnabeel64/repopackage

laravel 中简化仓库模式的工具,由 hnabeel64 创建

dev-main 2022-10-21 12:50 UTC

This package is not auto-updated.

Last update: 2024-09-21 20:43:50 UTC


README

通过一条命令创建仓库服务类、接口、预定义方法和模型。简化 CRUD 生成,方便仓库模式的使用者开发。

repopackage 是针对初学者到中级开发者的仓库设计模式实现的想法。节省开发者的时间,只需安装包并发布资产。无需手动添加模型,只需运行命令,repopackage 会处理其他事情。 ;)

  1. 使用以下命令安装包:composer require hnabeel64/repopackage

  2. 然后发布供应商:php artisan vendor:publish --tag=repository

  3. 现在,当存在新表并且你想要为其创建 CRUD 时,只需在控制台中写入:php artisan repository:make {TableName} 如果你还需要模型,它会询问模型确认,你只需要在模型中定义 protected $fillable = []; 并在控制器中尝试捕获方法。

用法

仓库模式使用简单

当你发布供应商并通过命令创建新的仓库时,这个基类接口会附带预定义的方法,例如

public function findAll(): Collection;

public function findById($id): ?Model;

public function storeRecord(array $array): ?Model;

public function updateRecord($id, array $array): bool;

public function deleteRecord($id): bool;

public function findLatest(): Model;

public function findByUpdated(): Model;

这些是仓库和接口中预定义的方法,它们都通过服务提供者动态绑定到服务容器中。

子接口包含以下额外方法

    public function findAll(): Collection;

    public function findById($id): ?Model;

    public function storeRecord(array $array): ?Model;

    public function updateRecord($id, array $array): bool;

    public function deleteRecord($id): bool;

    public function findLatest(): Model;

    public function findByUpdated(): Model;

    public function findBy($field, $value): ?Model;

    public function search($field, $value): ?Model;

⚠️ 注意:你必须在控制器中实现这些方法并使用 try-catch 块。通过依赖注入导入仓库类示例

use App\Repository\SlugRepository;


private $slug;
    public function __construct(SlugRepository $slug)
    {
        $this->slug = $slug;
    }
public function search(Request $request)
    {
        try
        {
            $name = $request->name;
            $field = 'name';
            $result = $this->slug->search($field, $name);
            if(!empty($result))
            {
                return $result;
            }
            return 'no record found';
        }
        catch (\Throwable $th) {
            return $th;
        }
    }

如果你发现任何漏洞或问题,可以通过电子邮件联系我或在这里创建一个 issue。任何贡献者都受欢迎 :)