rmitesh / laravel-pantry
生成一个具有基本默认功能的 Laravel 类。
README
你可能已经熟悉 Laravel 中的仓库模式。
现在,我将介绍 Laravel Pantry,这里你可以将所有东西都放在一个地方,就像食品仓库商店一样。
安装
您可以通过 composer 安装此包
composer require rmitesh/laravel-pantry
创建一个新的仓库
要创建一个新的仓库类
php artisan make:pantry Food
基于仓库类的名称,自动考虑模型名称将与仓库类相同。
或者您想为特定的模型生成。
php artisan make:pantry Food --model=FoodItem
它将在 app/Pantries
目录内创建 FoodPantry
类。而 Food
是模型类名称。
因此,最终的目录结构将如下所示。
|── app
└── Http
└── Controllers
└── FoodController.php
└── Models
└── Food.php
└── Pantries
└── FoodPantry.php
如何使用
在您的 FoodController
中添加 __construct
函数。
use App\Pantries\FoodPantry; class FoodController extends Controller { public function __construct( protected FoodPantry $foodPantry ) {} }
或者
use App\Pantries\FoodPantry; class FoodController extends Controller { /** * @var FoodPantry */ protected $foodPantry; public function __construct(FoodPantry $foodPantry) { $this->foodPantry = $foodPantry; } }
可用方法
get()
用于获取单个记录。
$food = $this->foodPantry->get($record);
它也适用于路由模型绑定。
如果找到记录,它将返回 Eloquent 类,否则将抛出 404 | Not found
。
getAll()
用于获取多个记录。
$foods = $this->foodPantry->getAll([ // your column name, default '*', // conditions, // relationships ]);
带有条件,这是一个可选参数。
$foods = $this->foodPantry->getAll( conditions: [ ['where', 'status', true ], ['whereHas', 'relationshipName' ], ] );
带有关系,这是一个可选参数。更多详情,请查看 使用关系获取数据。
$foods = $this->foodPantry->getAll([ 'id', 'name', 'created_at' ], [ 'with' => 'relationshipName', ]);
作为返回它将给出集合。
paginate()
用于获取具有分页的记录。
要使用 paginate()
方法,您必须使用 Rmitesh\LaravelPantry\Pantries\Concerns\HasPagination
。
use Rmitesh\LaravelPantry\Pantries\Concerns\HasPagination; class FoodPantry extends Pantry { use HasPagination; // add this in your Pantry class }
要更改每页记录数限制,您可以在您的仓库类中重写 $perPageRecordLenght
。
protected static ?int $perPageRecordLenght = 20;
默认情况下,
$perPageRecordLenght
的值设置为20
,这对于每页记录数来说已经足够。
$foods = $this->foodPantry->paginate([ // your column name, default '*' ]);
或者与关系一起
$foods = $this->foodPantry->paginate([ // your column name, default '*' ], [ 'with' => 'ingredients', ]);
作为返回它将给出 Illuminate\Pagination\LengthAwarePaginator
集合。
store()
将数据存储到表中。
您只需要传递数组数据。
$food = $this->foodPantry->store($request->validated());
作为返回它将给出创建的模型实例。
update()
用于更新表中的数据。
$food = $this->foodPantry->update($key, $request->validated());
作为返回它将给出更新的模型实例。
destroy()
用于删除单个记录。
$food = $this->foodPantry->destroy($key);
作为返回在删除记录时为 true,失败时为 false。
destroyAll()
用于一次性删除多个记录。
$food = $this->foodPantry->destroyAll($ids);
作为返回在删除记录时为 true,失败时为 false。
使用关系获取数据。
要添加关系,您可以以数组格式传递。
让我们举一个例子,一个 Food
有多个 ingredients
。所以,为了获取带有它们的 Ingredients
的 Food
记录。
$foods = $this->foodPantry->getAll( relationships: [ 'with' => 'ingredients', ] );
对于关系,作为键它应该是关系名称,如
with
,withWhereHas
,whereHas
,withCount
,whereBelongsTo
等。
此外,如果您想添加 Closure
函数,那么
use Illuminate\Database\Eloquent\Builder; $foods = $this->foodPantry->getAll( relationships: [ 'with' => [ 'ingredients', function ( Builder $query ) { // your conditions } ], ] );
或者如果您有多个关系,那么
use Illuminate\Database\Eloquent\Builder; $foods = $this->foodPantry->getAll( relationships: [ 'with' => [ [ 'ingredients' => function ( Builder $query ) { // your conditions }, ], [ // second relationship ... ], ], ] );
更新日志
请参阅 更新日志 了解最近发生了什么变化。
贡献
请参阅 贡献指南 了解详情。
安全漏洞
请参阅 我们的安全策略 了解如何报告安全漏洞。
给我买杯咖啡
致谢
许可证
MIT许可(MIT)。请参阅许可文件获取更多信息。