Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Laravel Sku Laravel Package

binary-cats/laravel-sku

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation:

    composer require binary-cats/laravel-sku
    

    The package auto-registers via SkuServiceProvider.

  2. Publish Config (optional):

    php artisan vendor:publish --provider="BinaryCats\Sku\SkuServiceProvider" --tag="config"
    

    Default config: config/laravel-sku.php.

  3. First Use Case: Add a sku column to your model table (e.g., products):

    php artisan make:migration add_sku_to_products_table --table=products
    

    Migration:

    Schema::table('products', function (Blueprint $table) {
        $table->string('sku')->unique()->nullable();
    });
    
  4. Generate SKU on Save: Use the HasSku trait in your model:

    use BinaryCats\Sku\Concerns\HasSku;
    
    class Product extends Model
    {
        use HasSku;
    
        protected $fillable = ['name', 'sku'];
    }
    

    Now, saving a model auto-generates an SKU:

    $product = new Product(['name' => 'Laravel Hoodie']);
    $product->save();
    echo $product->sku; // e.g., "LAR-80564492"
    

Implementation Patterns

Core Workflow

  1. Model Integration:

    • Use HasSku trait to enable SKU generation.
    • Define skuField() to specify the field driving SKU logic (e.g., name):
      public function skuField()
      {
          return 'name';
      }
      
  2. Custom SKU Logic:

    • Override generateSku() to customize generation:
      protected function generateSku(): string
      {
          return Str::of($this->name)->upper()->replace(' ', '-') . '-' . $this->incrementingId;
      }
      
  3. Validation:

    • Ensure sku is unique in migrations:
      $table->string('sku')->unique();
      
    • Use Laravel validation rules:
      $request->validate(['sku' => 'required|unique:products']);
      
  4. Bulk Operations:

    • Use generateSkuFor() to manually generate SKUs for existing records:
      Product::whereNull('sku')->get()->each->generateSkuFor();
      

Integration Tips

  • APIs: Return SKUs in responses:
    return ProductResource::collection(Product::all());
    
  • Admin Panels: Display SKUs in lists (e.g., Filament, Nova).
  • Imports: Generate SKUs during CSV/Excel imports:
    $product->sku = Str::sku($product->name);
    

Gotchas and Tips

Pitfalls

  1. Duplicate SKUs:

    • Always ensure sku is unique in migrations.
    • Handle collisions in generateSku():
      while (Product::where('sku', $this->sku)->exists()) {
          $this->sku = $this->generateSku() . '-duplicate';
      }
      
  2. Performance:

    • Avoid generating SKUs in loops without batching (e.g., use chunk() for large datasets).
    • Cache SKU generation if fields rarely change:
      protected static function booted()
      {
          static::updating(function ($model) {
              $model->sku = Str::sku($model->name);
          });
      }
      
  3. Config Overrides:

    • Published config (config/laravel-sku.php) may conflict with defaults. Review:
      'default' => [
          'prefix' => env('SKU_PREFIX', 'LAR'),
          'length' => 8,
          'separator' => '-',
      ],
      

Debugging

  • Log SKU Generation:
    \Log::debug('Generated SKU', ['sku' => $this->sku, 'model' => $this->getTable()]);
    
  • Check for Silent Failures:
    • Ensure HasSku is used and skuField() is defined. Test with:
      $model->generateSku(); // Manually trigger to debug.
      

Extension Points

  1. Custom Generators:

    • Extend BinaryCats\Sku\Generators\BaseGenerator:
      class CustomGenerator extends BaseGenerator
      {
          public function generate(): string
          {
              return 'CUST-' . Str::random(6);
          }
      }
      
    • Bind in AppServiceProvider:
      Sku::extend('custom', function () {
          return new CustomGenerator();
      });
      
  2. Dynamic Prefixes:

    • Use model events to set prefixes:
      Product::created(function ($product) {
          $product->update(['sku' => 'PRO-' . Str::after($product->sku, 'LAR-')]);
      });
      
  3. Localization:

    • Override Str::sku() for non-English fields:
      Str::macro('sku', function ($value) {
          return Str::of($value)->ascii()->upper()->sku();
      });
      
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
jayeshmepani/jpl-moshier-ephemeris-php
elnasnato/laraliveui
labrodev/rest-sdk
sampaui/sampaui
babelqueue/php-sdk
facebook/capi-param-builder-php
babelqueue/symfony
hamzi/corewatch
minionfactory/raw-hydrator
hexters/coinpayment
rjcodes/rjcms
act-training/laravel-permissions-manager
alimarchal/laravel-chart-of-accounts
babenkoivan/elastic-scout-driver
mkwebdesign/filament-watchdog-v5
renatomarinho/laravel-page-speed
zedmagdy/filament-business-hours
renatovdemoura/blade-elements-ui
devgeek/beacon-admin
benjamin-rqt/data-watcher-bundle