hypermetrica/laravel-sku

为 Eloquent 模型生成 SKU

dev-master 2021-01-23 19:01 UTC

This package is auto-updated.

Last update: 2024-09-24 02:59:32 UTC


README

在保存任何 Eloquent 模型时生成唯一的 SKU,支持 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 hypermetrica/laravel-sku

服务提供器将自动注册自身。

您可以使用以下命令发布配置文件:

php artisan vendor:publish --provider="Hypermetrica\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
         */
        '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' => \Hypermetrica\Sku\Concerns\SkuGenerator::class,
];

请注意,上述设置假定您在模型中有一个 sku 字段。如果您计划手动覆盖值,请确保将其添加到 fillable 数组中;

用法

Hypermetrica\Sku\HasSku 特性添加到您的模型中。这就完成了!

namespace App;

use Hypermetrica\Sku\HasSku;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasSku;
}

幕后,这将注册一个观察者以处理 sku 字段,每次保存模型时都会生成该字段。

高级用法

如果您想更改特定模型的设置,您可以重载 skuOptions() 方法

namespace App;

use Hypermetrica\Sku\HasSku;
use Hypermetrica\Sku\Concerns\SkuOptions;
use Illuminate\Database\Eloquent\Model;

class Product extends Model
{
    use HasSku;

    /**
     * Get the options for generating the Sku.
     *
     * @return Hypermetrica\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

库存单位 允许您设置一个唯一的标识符或代码,该代码引用特定的库存单位。

变更日志

有关最近更改的更多信息,请参阅 变更日志

测试

composer test

安全

如果您发现任何安全相关的问题,请通过电子邮件 cyrill.kalita@gmail.com 反馈,而不是使用问题跟踪器。