Skip to content

Product Manufacturer ​

First-Pass Node Dossier

This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.

What It Is ​

ProductManufacturer is the technical brand record in Pyle. It groups products under a brand identity, feeds storefront brand browse pages, and acts as a parent context for categories, collections, and product groups.

Parent hierarchy:

  • Catalog & Merchandising
  • Taxonomy
  • Product Manufacturer

Primary implementation paths:

  • packages/framework/src/Models/ProductManufacturer.php
  • packages/framework/src/Actions/ProductManufacturer
  • packages/framework/src/Http/Controllers/Api/Admin/ProductManufacturersController.php

What Users Can Do With It ​

Direct capabilities ​

Admin users can:

  • create brands in Settings > Brands
  • edit brand name, description, imagery, active state, visible state, featured state, and SEO fields
  • delete a brand
  • list, search, and filter brands through the admin API
  • manage brands in bulk through Excel
  • sync brands from ERP

Indirect capabilities ​

Other workflows depend on the brand record:

  • products select a brand
  • categories and collections can be associated with a brand
  • storefront brand pages and brand filtering depend on visibility and active-product rules
  • product groups are partly brand-scoped

Where It Is Managed ​

ChannelRoleNotes
Admin Settings UIDirectUser-facing name is Brand
Admin APIDirectCRUD plus search/filter/include support
Product admin flowsIndirectProducts select a brand
StorefrontIndirectFirst-class browse pages use the same record
Excel import/exportDirectBrand rows are part of the product template
ERP bridgeDirectDedicated manufacturer sync request and service exist

Sources:

  • packages/framework/src/Http/Controllers/Api/Admin/ProductManufacturersController.php
  • packages/storefront/src/Livewire/Storefront/Brands/Page.php
  • packages/storefront/src/Livewire/Storefront/Brand/Page.php
  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductManufacturerRows.php
  • packages/erp-bridge/src/Requests/ProductManufacturers/GetProductManufacturersRequest.php

Channel-Level Field Coverage ​

Admin create dialog ​

The packaged create dialog exposes:

  • name
  • description
  • image_link
  • active
  • visible
  • featured

Source:

Admin edit dialog ​

The packaged edit dialog adds:

  • meta_title
  • meta_description
  • slug

Source:

Admin API ​

The admin API allows CRUD and list shaping around fields such as:

  • name
  • description
  • slug
  • SEO fields
  • featured
  • image_link
  • cover_image_link

It also supports includes and filters around product counts, price-zone counts, featured state, sample presence, and visible state.

Source:

  • packages/framework/src/Http/Controllers/Api/Admin/ProductManufacturersController.php

Model fields that exist but are not clearly exposed in the inspected packaged brand dialogs ​

Examples include:

  • external_id
  • code
  • sku_prefix
  • cover_image_link
  • cover_image_link_2
  • sort
  • extra_attributes

Source:

  • packages/framework/src/Models/ProductManufacturer.php

Configuration And Data Model ​

Key model characteristics:

  • translatable
  • searchable
  • soft-deletable
  • ERP-syncable
  • activity-log aware
  • emits activation and update events

Important field groups:

Field GroupPurpose
identitytranslated name, code, translated slug
storefront visibilityactive, visible, featured
contentdescription, imagery, SEO fields
external controlexternal_id, sku_prefix, extra_attributes

The visible() scope also requires:

  • visible = true
  • active = true
  • at least one active product

Sources:

  • packages/framework/src/Models/ProductManufacturer.php
  • packages/framework/src/Actions/ProductManufacturer/CreateProductManufacturer.php
  • packages/framework/src/Actions/ProductManufacturer/UpdateProductManufacturer.php

Relationships ​

ProductManufacturer directly relates to:

  • products
  • productGroups
  • productCategories
  • productCollections
  • productVendors

Practical dependencies:

  • product browse and filtering depend on the brand record
  • collection and product-group behavior often inherits brand context
  • price-zone-related API affordances already exist even though Pricing docs are not built yet

Source:

  • packages/framework/src/Models/ProductManufacturer.php

Rules And Downstream Effects ​

Important behavior:

  • manufacturer codes are unique across active, inactive, and soft-deleted records
  • when brand creation generates a code owned by another nondeleted brand, it returns an English-name validation error without changing the existing brand; normal restoration of a matching deleted brand remains supported
  • deleting a product manufacturer deletes its product groups
  • deactivating a manufacturer dispatches DeactivateProductManufacturerProducts

This means a brand change is not just cosmetic. It can affect grouped catalog behavior and product availability.

Sources:

  • packages/framework/src/Models/ProductManufacturer.php
  • packages/framework/src/Listeners/ProductManufacturer/DeactivateProductsListener.php
  • packages/framework/src/Actions/Product/DeactivateProductManufacturerProducts.php

Integrations And Automation ​

Excel ​

Brand data is included in the product export template through product_manufacturers, and the import sheet supports create, update, and delete by UUID.

The sheet keeps the supplied code and normalizes it to lowercase. If another manufacturer owns that code, the row reports an error in the code column. This also applies to inactive and soft-deleted owners. Updating or restoring the same manufacturer by UUID may retain its own code.

If a code becomes occupied during insertion or update, the failed write is rolled back and reported as a row error. Later rows can still be processed.

Source:

  • packages/framework/src/Actions/Import/Product/Sheets/ImportProductManufacturerRows.php

ERP bridge ​

Manufacturers have a dedicated ERP request and sync path.

Source:

  • packages/erp-bridge/src/Requests/ProductManufacturers/GetProductManufacturersRequest.php
  • packages/framework/src/Services/ErpBridge/ProductManufacturer/ProductManufacturerErpSyncService.php

Where It Appears To End Users ​

ProductManufacturer is first-class in storefront browse behavior, but shoppers encounter it as a Brand.

The inspected storefront uses it for:

  • brands index pages
  • individual brand pages
  • brand and category combined browse pages
  • brand and collection browse pages
  • nested product payloads

Sources:

  • packages/storefront/routes/web.php
  • packages/storefront/src/Livewire/Storefront/Brands/Page.php
  • packages/storefront/src/Livewire/Storefront/Brand/Page.php
  • packages/storefront/src/Livewire/Storefront/Brand/CategoryPage.php
  • packages/storefront/src/Livewire/Storefront/Brand/CollectionPage.php
  • packages/framework/src/Http/Resources/Storefront/ProductManufacturerResource.php

Current Documentation Takeaways ​

The three most important operator-level facts are:

  1. ProductManufacturer is the technical name, but Brand is the business and storefront name.
  2. Brand visibility is operational, not cosmetic, because storefront brand lists require visibility, activation, and active products.
  3. Brand state changes can cascade into product and product-group behavior.

Open Questions ​

  • The admin API already exposes price-zone-oriented includes and filters, but the first-pass Pricing documentation is not built yet.
  • The inspected packaged brand dialogs do not strongly surface fields such as sku_prefix or extra_attributes, so those remain integration-oriented for now.