packagedby/model-repositories

该软件包已被弃用且不再维护。作者建议使用 nathandunn/model-repositories 软件包。
关于此软件包最新版本(2.0.1)的许可信息不可用。

使用 Laravel 模型轻松创建仓库

2.0.1 2022-02-08 21:25 UTC

This package is auto-updated.

Last update: 2023-02-18 22:07:38 UTC


README

围绕 Eloquent 模型,允许它们作为仓库使用。

为什么?

因为从“模型对象”获取集合并不是模型的作用,而且在注入模型并在其他上下文中使用它时具有误导性

灵感来源于 Jack Wagstaffe

安装

您可以通过运行以下命令使用 Composer 安装此软件包:

composer require packagedby/model-repositories

使用说明

以下是一个用于 Record 模型的示例仓库。它扩展了基本的 Repository 类并添加了自定义的 forUser 方法。

<?php

namespace App\Records;

use App\Users\User;
use Illuminate\Database\Eloquent\Builder;
use PackagedBy\Repositories\Repository;

class RecordRepository extends Repository
{
    /**
     * @param Record $record
     */
    public function __construct(Record $record)
    {
        parent::__construct($record);
    }

    public function forUser(User $user): Builder
    {
      return $this->model->where('user_id', '=', $uuid);
    }
}

您可以在控制器中注入 RecordRepository

<?php

namespace App\Http\Controllers;

use App\Http\Resources\RecordResource;
use App\Records\RecordRepository;
use Illuminate\Http\Request;

class RecordsController extends Controller
{
    protected RecordRepository $recordRepository;
    
    public function __construct(RecordRepository $recordRepository)
    {
        $this->recordRepository = $recordRepository;
    }
    
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index(Request $request)
    {
        $user = $request->user();
        $records = $this->recordRepository->forUser($user)->get();
        
        return RecordResource::collection($records);
    }
}