Product Category
First-Pass Node Dossier
This page is an evidence-backed node dossier generated from the domain hierarchy and node questionnaire.
What It Is
ProductCategory is Pyle’s hierarchical category record for browse structure, storefront navigation, and category-level filter behavior. It can carry translated content, imagery, brand association, parent-child relationships, and curated attribute filters.
Parent hierarchy:
Catalog & MerchandisingTaxonomyProduct Category
Primary implementation paths:
packages/framework/src/Models/ProductCategory.phppackages/framework/src/Actions/ProductCategorypackages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.phppackages/admin/src/Livewire/Admin/Settings/Categories
What Users Can Do With It
Direct capabilities
Admin users can:
- create categories in Settings > Categories
- edit names, descriptions, imagery, SEO content, slugs, and HTML content
- assign parent categories
- attach category attribute filters and control their featured/sort behavior
- delete categories when they are not in use
- create, update, and delete categories through the admin API
- manage categories in bulk through Excel and ERP sync
Indirect capabilities
Other workflows use categories without making the category editor the only control point:
- products can be assigned to categories
- product types can be associated to categories through Excel
- storefront browse paths and attribute filters depend on category configuration
Where It Is Managed
| Channel | Role | Notes |
|---|---|---|
| Admin Settings UI | Direct | Main packaged category create/edit flow |
| Admin API | Direct | CRUD plus search/filter/include support |
| Product admin flows | Indirect | Products choose a primary category and can sync category relations |
| Storefront | Indirect | Category pages are first-class shopper browse surfaces |
| Excel import/export | Direct | Category rows and category relationship sheets exist |
| ERP bridge | Direct | Category sync request and sync actions exist |
Sources:
packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/CreateDialog.phppackages/admin/src/Livewire/Admin/Settings/Categories/DataTable/EditDialog.phppackages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.phppackages/framework/src/Http/Resources/Storefront/ProductCategoryResource.phppackages/framework/src/Actions/Import/Product/Sheets/ImportProductCategoryRows.phppackages/erp-bridge/src/Requests/ProductCategories/GetProductCategoriesRequest.php
Channel-Level Field Coverage
Admin create dialog
The packaged create dialog exposes:
parent_idnamedescriptionimage_link
Source:
packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/CreateDialog.php
Admin edit dialog
The packaged edit dialog exposes:
parent_idnamedescriptionmeta_titlemeta_descriptionslugimage_linkhtml_contentproduct_attributes_filters
The attribute-filter workflow also exposes pivot-level behavior for:
featuredsortsort_by
Source:
packages/admin/src/Livewire/Admin/Settings/Categories/DataTable/EditDialog.php
Admin API
The admin API allows CRUD and list shaping around fields such as:
namedescriptionslug- SEO fields
product_manufacturer_id
It also supports including productManufacturer.
Source:
packages/framework/src/Http/Controllers/Api/Admin/ProductCategoriesController.php
Model fields that exist but are not clearly exposed in the inspected packaged category editor
Examples include:
activeproduct_manufacturer_idcover_image_linkcover_image_link_2icon_image_urlfacet_filtersprice_ranges_filtersfilterssortbrand_name_filterproduct_type_filterhas_sample_filterexternal_idcode
Several of these appear more strongly in import/export or sync flows than in the inspected packaged category dialogs.
Source:
packages/framework/src/Models/ProductCategory.php
Configuration And Data Model
Key model characteristics:
- translatable
- hierarchical through parent/child recursion
- searchable
- soft-deletable
- ERP-syncable
- activity-log aware
Important field groups:
| Field Group | Purpose |
|---|---|
| hierarchy | parent_id, descendants, path URLs |
| browse content | translated name, description, HTML content, imagery |
| SEO | meta title, meta description, meta keywords, slug |
| storefront controls | attribute filters, brand/type/sample filter flags |
| ownership | product_manufacturer_id, product type associations |
The model also exposes computed path_urls for storefront routing.
Sources:
packages/framework/src/Models/ProductCategory.phppackages/framework/src/Actions/ProductCategory/CreateProductCategory.phppackages/framework/src/Actions/ProductCategory/UpdateProductCategory.php
Relationships
ProductCategory directly relates to:
parentchildsproductsproductManufacturerproductTypesproductAttributesFiltersproductVendors
Practical dependencies:
- products rely on categories for browse placement
- category pages rely on child and parent relationships
- category filters rely on the category-to-attribute pivot metadata
Source:
packages/framework/src/Models/ProductCategory.php
Rules And Downstream Effects
Deletion rules:
- a category cannot be deleted if products are attached through the many-to-many relation
- a category cannot be deleted if products still use it as the direct
product_category_id - a category cannot be deleted if it still has child categories
Practical downstream effects:
- changing category filters affects storefront filtering behavior
- changing hierarchy affects path-based storefront navigation
- category keywords include type-related search behavior
Sources:
packages/framework/src/Actions/ProductCategory/DeleteProductCategory.phppackages/framework/src/Actions/ProductCategory/GenerateSearchKeywords.phppackages/framework/src/Http/Resources/Storefront/ProductCategoryResource.php
Integrations And Automation
Excel
Category-related bulk surfaces include:
product_categoriesproduct_product_categoryproduct_type_product_category- category attribute-filter export support
Source:
packages/admin/src/Livewire/Admin/Tools/Excel/ExportDialog/ProductExport.phppackages/framework/src/Actions/Exports/Product/Sheets/ProductCategoryAttributeFiltersSheet.phppackages/framework/src/Actions/Import/Product/Sheets/ImportProductCategoryRows.phppackages/framework/src/Actions/Import/Product/Sheets/ImportProductProductCategoryRows.phppackages/framework/src/Actions/Import/Product/Sheets/ImportProductTypeProductCategoryRows.php
ERP bridge
Product categories have dedicated ERP request and sync paths.
Source:
packages/erp-bridge/src/Requests/ProductCategories/GetProductCategoriesRequest.phppackages/framework/src/Services/ErpBridge/ProductCategory/ProductCategoryErpSyncService.php
Where It Appears To End Users
ProductCategory is first-class in the storefront.
The inspected storefront uses it for:
- category landing pages
- pretty path routing through
path_urls - child-category browsing
- category-level attribute filters
- brand-scoped category browse pages
The inspected homepage category tiles are more configuration-driven than category-record-driven. In the home page component, they come from storefront.menu_items rather than a raw category query.
Sources:
packages/storefront/routes/web.phppackages/storefront/src/Livewire/Storefront/Home/Page.phppackages/storefront/src/Livewire/Storefront/Category/Page.phppackages/storefront/src/Livewire/Storefront/Brand/CategoryPage.phppackages/framework/src/Http/Resources/Storefront/ProductCategoryResource.php
Current Documentation Takeaways
The three most important operator-level facts are:
ProductCategoryis more than a label. It controls browse hierarchy, content, and filter behavior.- The packaged category editor exposes rich filter and content configuration, but some model fields are still bulk or sync oriented.
- Category deletion is intentionally guarded because categories can own both products and child categories.
Open Questions
product_manufacturer_idis a real field and import concern, but it was not clearly exposed in the inspected packaged category dialogs.- Some filter-related model fields appear to be project- or import-oriented rather than strongly surfaced in the packaged settings UI.