nestermaks / laravel-pricelist
支持多语言的价格单包,适用于Laravel,包含迁移和API控制器
Requires
- php: ^8.0
- astrotomic/laravel-translatable: ^11.9
- illuminate/contracts: ^8.37
- spatie/laravel-package-tools: ^1.4.3
Requires (Dev)
- brianium/paratest: ^6.2
- nunomaduro/collision: ^5.3
- orchestra/testbench: ^6.15
- phpunit/phpunit: ^9.3
- spatie/laravel-ray: ^1.9
- vimeo/psalm: ^4.4
This package is auto-updated.
Last update: 2024-09-16 18:58:31 UTC
README
此包允许您管理价格单并在其中重新排列项目。它不是一种定价表格,其中您有一份功能和价格列表。它负责创建列表,其中每个项目都有自己的价格。此外,每个项目都可以属于多个价格单。
此包包含
- 模型
- 迁移
- API路由
- API控制器
- 翻译
- 配置文件
目录
安装
您可以通过composer安装此包
composer require nestermaks/laravel-pricelist
使用以下命令发布并运行迁移
php artisan vendor:publish --tag=pricelist-migrations php artisan migrate
配置
您可以覆盖翻译文件或添加一个新的。使用以下命令发布lang文件
php artisan vendor:publish --tag=pricelist-translations
您可以覆盖默认选项,如使用的区域设置、API路由前缀和验证规则。发布配置
php artisan vendor:publish --tag=pricelist-config
这是发布配置文件的内容
<?php // config for Laravel Pricelist return [ ///////////////////////////////////////////// //Locales for Astrotomic/laravel-translatable ///////////////////////////////////////////// 'locales' => [ 'en', 'ru', 'uk', ], /////////////////// //API routes prefix /////////////////// 'api' => 'nestermaks-api', ////////////////////////// //Pricelists routes prefix ////////////////////////// 'pricelists' => 'pricelists', /////////////////////////////// //Pricelist items routes prefix /////////////////////////////// 'items' => 'pricelist-items', //////////////////////////////////////////////// //Items amount shown when index method is called //////////////////////////////////////////////// 'pricelists-per-page' => 10, 'pricelist-items-per-page' => 10, /////////////////////////////////////////////// //Validation rules for store and update methods /////////////////////////////////////////////// 'store-pricelists' => [ 'title' => ['required', 'max:256'], 'description' => ['max:1000'], 'lang' => ['max:16'], 'order' => ['numeric', 'min:0', 'max:65535'], 'active' => ['boolean'] ], 'update-pricelists' => [ 'title' => ['max:256'], 'description' => ['max:1000'], 'lang' => ['max:16'], 'order' => ['numeric', 'min:0', 'max:65535'], 'active' => ['boolean'] ], 'store-pricelist-items' => [ 'title' => ['required', 'max:256'], 'units' => ['required', 'max:256'], 'lang' => ['max:16'], 'shortcut' => ['required', 'max:256'], 'price' => ['required', 'numeric', 'min:0'], 'max_price' => ['prohibited_if:price_from,true'], 'price_from' => ['boolean'], 'active' => ['boolean'] ], 'update-pricelist-items' => [ 'title' => ['max:256'], 'units' => ['max:256'], 'lang' => ['max:16'], 'shortcut' => ['max:256'], 'price' => ['numeric', 'min:0'], 'max_price' => ['prohibited_if:price_from,true'], 'price_from' => ['boolean'], 'active' => ['boolean'] ], ];
数据库
迁移文件提供了如下表格
-
pricelists。此表类似于价格单项的容器。它具有以下字段
order
- 在前端设置优先级active
- 定义价格单是否活动
表'pricelists'的可翻译字段在表'pricelist_translations'中。表'pricelists'有多个价格单项翻译
-
pricelist_translations。字段
pricelist_id
- 相关价格单项的idlocale
- 翻译的语言title
- 价格单的标题description
- 如果需要,价格单的描述
-
pricelist_items。价格单项的元素。字段
shortcut
- 用于内部使用以标识您的价格单项。例如,如果您有不同标题的相同项目price
- 您产品的价格。如果设置了'max_price'字段,则此字段表示最低价格。max_price
- 如果您的产品没有固定价格,则此字段描述最大价格。price_from
- 如果您产品的价格从'price'字段中设置的值开始,并且没有上限。布尔值。active
- 定义价格单项是否活动
表'pricelist_items'的可翻译字段在表'pricelist_items_translations'中。表'pricelists'有多个价格单项翻译
-
pricelist_items_translations。字段
pricelist_item_id
- 相关价格单项的idlocale
- 翻译的语言title
- 您产品的名称units
- 您产品可以计算的单位
-
pricelist_pricelist_item。多对多关系的枢纽表。还包括字段'item_order',它定义了表内元素的顺序。
-
pricelistables。多态多对多关系表。负责将价格单附加到您的价格单项模型。
使用
注册模型
为了让您的模型能够附加价格表,请将 HasPricelist 特性添加到您的模型类中
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Nestermaks\LaravelPricelist\HasPricelist; class Offer extends Model { use HasPricelist; ... }
关联价格单
您可以像这样将价格表与模型关联
$offer = Offer::first(); $pricelist = Pricelist::first(); $offer->addPricelist($pricelist);
或者,您可以从模型中分离价格表
$offer->removePricelist($pricelist);
要查看模型的全部价格表
$offer->pricelists();
显示价格单和价格单项
显示所有活动的价格表
Pricelist::getActiveItems();
价格表项也是如此
PricelistItem::getActiveItems();
显示与价格表相关的价格表项
Pricelist::relatedItems();
显示包含价格表项的价格表
PricelistItem::relatedItems();
将价格单项附加到价格单并从价格单中分离
假设我们有这样的变量
$pricelists = Pricelist::all(); $pricelist = Pricelist::first(); $pricelist_items = PricelistItem::all(); $pricelist_item = PricelistItem::first();
要将项目附加到价格表
$pricelist->attachItems($pricelist_items);
或者将一个价格表项附加到多个价格表
$pricelist_item->attachItems($pricelists);
从价格表中分离项目
$pricelist->detachItems($pricelist_items);
从给定的价格表中分离项目
$pricelist_item->detachItems($pricelists);
注意,在这些情况下,参数都是集合。
在价格单内重新排序价格单项
当您将价格表项附加到价格表时,每个价格表项都会获得其顺序号。要查看价格表项在价格表中的顺序号,请使用
$pricelist->getItemOrder($pricelist_item);
或者
$pricelist_item->getItemOrder($pricelist);
要设置价格表项在价格表中的新顺序号,请使用
$pricelist->changeItemOrder($pricelist_item, 3);
或者
$pricelist_item->changeItemOrder($pricelist, 3);
第二个参数是新顺序号。在分配价格表项的新顺序号后,其他价格表项将适当地在价格表中重新排列。
API路由
您可以使用 API 调用来管理您的价格表。在配置文件中设置所需的 API 前缀或保留默认值。对于价格表和价格表项 CRUD,使用 API 资源路由和 API 资源控制器。您可以查阅 Laravel 的文档。
CRUD操作
价格单
CRUD 中要使用的参数
- 标题
- 描述
- 语言
- 顺序
- 活动
例如,要更新 ID 为 "12" 的价格表,请发出 patch 请求
https://yoursite.com/nestermaks-api/pricelists/12?active=0&title=web site development&description=here goes description&lang=en&order=10
价格单项
CRUD 中要使用的参数
- 标题
- 单位
- 语言
- 快捷方式
- 价格
- 最高价格
- 价格从
- 活动
例如,要更新 ID 为 "12" 的价格表项,请发出 patch 请求
https://yoursite.com/nestermaks-api/pricelist-items/12?title=landing page development&units=hour&lang=en&shortcut=land-dev&price=10&max-price=15&price-from=0&active=1
将价格单附加到价格单项并从价格单项中分离
发出 POST 请求。URL 应看起来像
https://yoursite.com/nestermaks-api/pricelists/relation
参数
- 操作(可以是 'detachItems' 或 'attachItems')
- 价格表 ID
- 价格表项 ID
pricelist_id 和 pricelist_items_id 中的一个应该是整数,另一个应该是数组。
示例
https://yoursite.com/nestermaks-api/pricelists/relation?action=AttachItems&pricelist_id=2&pricelist_item_id=[3,4,5,6]
将价格单与您的模型关联
发出 POST 请求。URL 应看起来像
https://yoursite.com/nestermaks-api/pricelists/model
参数
- 操作(可以是 addPricelist 或 removePricelist)
- 模型名称(应该是您模型的全限定类名)
- 模型 ID
- 价格表 ID
示例
https://yoursite.com/nestermaks-api/pricelists/model?action=addPricelist&model_name=App\Models\User&model_id=2&pricelist_id=4
显示您模型的关联价格表
发出 GET 请求。URL 应看起来像
https://yoursite.com/nestermaks-api/pricelists/get/{model_name}/{model_id}
参数
- 模型名称(应该是您模型的全限定类名)
- 模型 ID
示例
https://yoursite.com/nestermaks-api/pricelists/get/App\Models\User/3
在价格单内更改价格单项的顺序
发出 POST 请求。URL 应看起来像
https://yoursite.com/nestermaks-api/pricelists/change-order
参数
- 价格表 ID
- 价格表项 ID
- 项目顺序(价格表项在价格表中的新顺序号)
示例
https://yoursite.com/nestermaks-api/pricelists/change-order?pricelist_id=3&pricelist_item_id=7&item_order=5
测试
composer test
变更日志
有关最近更改的更多信息,请参阅变更日志
贡献
有关详细信息,请参阅贡献指南
安全漏洞
请审查我们的安全策略,了解如何报告安全漏洞。
鸣谢
许可证
MIT 许可证(MIT)。有关更多信息,请参阅许可证文件