rmitesh/laravel-pantry

生成一个具有基本默认功能的 Laravel 类。

v1.0.7 2023-10-28 09:15 UTC

This package is auto-updated.

Last update: 2024-09-21 18:32:59 UTC


README

你可能已经熟悉 Laravel 中的仓库模式。

现在,我将介绍 Laravel Pantry,这里你可以将所有东西都放在一个地方,就像食品仓库商店一样。

laravel-pantry

Latest Stable Version Total Downloads Laravel v10.x PHP 8.1

安装

您可以通过 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。所以,为了获取带有它们的 IngredientsFood 记录。

$foods = $this->foodPantry->getAll(
    relationships: [
        'with' => 'ingredients',
    ]
);

对于关系,作为键它应该是关系名称,如 withwithWhereHaswhereHaswithCountwhereBelongsTo 等。

此外,如果您想添加 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 ...
        	],
        ],
    ]
);

更新日志

请参阅 更新日志 了解最近发生了什么变化。

贡献

请参阅 贡献指南 了解详情。

安全漏洞

请参阅 我们的安全策略 了解如何报告安全漏洞。

给我买杯咖啡

Buy Me A Coffee

致谢

许可证

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