Module: PIM

Enterprise-Grade Product Management

The central repository for product data, media assets, hierarchical categorization, and advanced pricing strategies. Built for Laravel.

Read Documentation
$ composer require obelaw/pim
Laravel 10+ PHP 8.2+ PestPHP
CreateProduct.php
use Obelaw\Pim\Data\ProductDTO;
use Obelaw\Pim\Data\VariantDTO;

// Create Configurable Product
$productData = new ProductDTO(
  sku: 'TSHIRT-BASE',
  name: 'Cotton T-Shirt',
  productType: 'configurable',
  uomId: 1,
  variants: [
    new VariantDTO(
      sku: 'TSHIRT-RED-S',
      price: 19.99
    )
  ]
);

Key Features

Everything needed for modern e-commerce and inventory systems.

Multi-Type Products

Support for diverse structures. Simple Products for standalone items and Configurable Products for managing variants like size and color.

Dynamic Attributes

EAV-like system for unlimited technical specs (ingredients, voltage, etc.) without altering the database schema.

Advanced Pricing

Create unlimited price lists with validity periods. Override prices at the variant level and handle promotional pricing strategies.

Polymorphic Media

Centralized assets for Products and Variants. Support for multiple media types, galleries, and manuals.

Hierarchical Categories

Organize catalogs with infinite depth. Full parent-child relationship support for complex navigation trees.

UOM Engine

Dynamic Unit of Measure conversion logic (e.g., 1 Box = 12 Pieces). Define separate Sales and Stock UOMs.

Developer Experience

Obelaw PIM uses strict DTOs and Facades to make interactions predictable and type-safe.

Price Resolution

Automatically resolves the best effective price checking dates and variant overrides.

Unit Conversions

Convert quantities between different units with ease using the UOM Converter.

use Obelaw\Pim\Facades\PIM;

// 1. Resolve Best Price
$resolver = PIM::prices();
// Checks validity dates & variant overrides automatically
$finalPrice = $resolver->resolve($variant, $currentPriceListId);

// 2. Managing Price Lists
$summerSale = PriceList::create([
    'name' => 'Summer Sale 2026',
    'start_date' => '2026-06-01',
    'end_date' => '2026-08-31',
]);

// Assign promotional price
$product->prices()->create([
    'price_list_id' => $summerSale->id,
    'price' => 100.00,
    'special_price' => 89.99
]);

Seamless Ecosystem Integration

Obelaw WMS

Share product data for batch tracking, expiration dates, and bin locations.

Obelaw OMS

Provides critical product attributes for order lifecycles and fulfillment.

Obelaw Obi

AI-ready architecture. Obi can search for "Best Price" or "Accessories".

Obelaw Flow

Structural data readiness for frontend comparison tables and galleries.

Back to Stack Overview