amidesfahani / laravel-sku
为 Eloquent 模型生成 SKUs
Requires
- php: ^7.2|^8.0
- illuminate/support: ~5.6|^6.0|^7.0|^8.0
Requires (Dev)
- orchestra/testbench: ^3.6|^4.0|^5.0|^6.0
- phpunit/phpunit: ^7.0|^8.2|^9.0
This package is auto-updated.
Last update: 2024-09-14 14:40:01 UTC
README
在保存任何 Eloquent 模型时生成唯一的 SKUs,支持 Laravel 5.6、Laravel 6 及以上版本。
$model = new EloquentModel(); $model->name = 'Laravel is Awesome'; $model->save(); echo $model->sku; // ouputs "LAR-80564492"
该包将为 Laravel 的 Illuminate\Support\Str::sku()
类添加一个新方法来为您生成 SKU。
安装
您可以通过 composer 安装此包
composer require amidesfahani/laravel-sku
服务提供者将自动注册自身。
您可以使用以下命令发布配置文件:
php artisan vendor:publish --provider="Amid\Sku\SkuServiceProvider" --tag="config"
以下是将在 config/laravel-sku.php
中发布的配置文件内容:
return [ /* |-------------------------------------------------------------------------- | SKU settings |-------------------------------------------------------------------------- | | Set up your SKU | */ 'default' => [ /* * SKU is based on a specific field of a model * You can use a single field or an array of fields or string */ 'source' => 'name', /* * Destination model field name * */ 'field' => 'sku', /* * SKU separator * */ 'separator' => '-', /* * Shall SKUs be enforced to be unique * */ 'unique' => true, /* * Shall SKUs be generated on create * */ 'generate_on_create' => true, /* * Shall SKUs be re-generated on update * */ 'generate_on_update' => true, ], /* |-------------------------------------------------------------------------- | SKU Generator |-------------------------------------------------------------------------- | | Define your own generator if needed. | */ 'generator' => \Amid\Sku\Concerns\SkuGenerator::class, ];
请注意,上述设置假定您在模型中有一个 sku
字段。如果您计划手动覆盖值,请确保将此字段添加到 fillable
数组中;
使用方法
将 Amid\Sku\HasSku
特性添加到您的模型中。就是这样!
namespace App; use Amid\Sku\HasSku; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasSku; }
幕后,这将注册一个观察器来监听 sku
字段,每次保存模型时都会生成 SKU。
高级使用
如果您想为特定模型更改设置,可以重载 skuOptions
() 方法
namespace App; use Amid\Sku\HasSku; use Amid\Sku\Concerns\SkuOptions; use Illuminate\Database\Eloquent\Model; class Product extends Model { use HasSku; /** * Get the options for generating the Sku. * * @return Amid\Sku\SkuOptions */ public function skuOptions() : SkuOptions { return SkuOptions::make() ->from(['label', 'another_field']) ->target('arbitrary_sku_field_name') ->using('_') ->forceUnique(false) ->generateOnCreate(true) ->refreshOnUpdate(false); } }
自定义生成器
假设您需要一些额外的逻辑,例如设置默认值或为 SKU 定义前缀,您可以实现自己的 SkuGenerator。最简单的方法是扩展基类,但您也可以自由探索任何其他方法。
首先,创建一个自定义类
namespace App\Components\SkuGenerator; use Amid\Sku\Concerns\SkuGenerator; class CustomSkuGenerator extends SkuGenerator { /** * Get the source fields for the SKU. * * @return string */ protected function getSourceString(): string { // fetch the source fields $source = $this->options->source; // Fetch fields from model, skip empty $fields = array_filter($this->model->only($source)); // Fetch fields from the model, if empty, use custom logic to resolve if (empty($fields)) { return 'some-random-value-logic'; } // Impode with a separator return implode($this->options->separator, $fields); } }
然后更新 generator
配置值
'generator' => \App\Components\SkuGenerator\CustomSkuGenerator::class,
您也可以选择完全更改实现;只需记住,自定义生成器必须实现 Amid\Sku\Contracts\SkuGenerator
。
关于 SKUs
库存单位(SKU) 允许您设置一个唯一的标识符或代码,该代码引用特定的库存单位。
变更日志
有关最近更改的更多信息,请参阅 变更日志。
测试
composer test
鸣谢(原始包)
许可证
MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件。