binary-cats/laravel-sku

为Eloquent模型生成SKU

0.7.0 2024-02-03 18:54 UTC

This package is auto-updated.

Last update: 2024-09-17 16:24:58 UTC


README

处理模型SKU

在保存任何Eloquent模型时生成唯一的SKU。

$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 binary-cats/laravel-sku

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

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

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

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

用法

BinaryCats\Sku\HasSku特质添加到您的模型中。就这样!

namespace App;

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

class Product extends Model
{
    use HasSku;
}

幕后,这将注册一个用于sku字段的观察者,每次您保存模型时都会生成。

高级用法

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

namespace App;

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

class Product extends Model
{
    use HasSku;

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

您也可以选择完全更改实现;只需记住,自定义生成器必须实现BinaryCats\Sku\Contracts\SkuGenerator

关于SKU

库存单元允许您设置一个唯一的标识符或代码,该代码指向特定的库存单元。

更新日志

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

测试

composer test

贡献

有关详细信息,请参阅贡献

安全

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

明信片软件

您可以免费使用此包,但如果它进入您的生产环境,我们非常感谢您从您的家乡给我们寄一张明信片,提到您正在使用我们的哪些包。

鸣谢

支持我们

Binary Cats是一家位于美国伊利诺伊州的网页设计公司。

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件