Module Integrations
How Magento_Catalog integrates with EAV, Inventory, Search, Quote, Sales, CMS, and exposes data via GraphQL and REST APIs.
How Magento_Catalog integrates with EAV, Inventory, Search, Quote, Sales, CMS, and exposes data via GraphQL and REST APIs.
Magento_Catalog is tightly coupled with Magento_Eav. Products and Categories are EAV entities, meaning their attributes are stored dynamically in separate tables based on data type.
// EAV Entity Type Registration eav_entity_type ├── entity_type_code: catalog_product ├── entity_model: Magento\Catalog\Model\ResourceModel\Product ├── attribute_model: Magento\Catalog\Model\ResourceModel\Eav\Attribute └── entity_table: catalog_product_entity // Attribute Tables catalog_product_entity_varchar (name, url_key, meta_title) catalog_product_entity_int (status, visibility) catalog_product_entity_decimal (price, weight) catalog_product_entity_datetime (special_from_date) catalog_product_entity_text (description)
Magento\Catalog\Model\ResourceModel\Product - EAV resource modelMagento\Catalog\Model\ResourceModel\Eav\Attribute - Catalog attribute modelMagento\Catalog\Setup\Patch\Data\* - Attribute creation patchesCatalog integrates with both legacy CatalogInventory and modern Multi-Source Inventory (MSI) for stock management.
// Load stock via extension
$product->getExtensionAttributes()
->getStockItem()
->getQty();
// Check salability via MSI
$isSalable = $productSalability
->isSalable($sku, $stockId);
When saving products via API, stock data may not be properly processed if not included in extension attributes. Always explicitly set stock_item extension attribute when saving via ProductRepository.
Magento_Catalog provides the foundation for product search, which is extended by CatalogSearch and search engine adapters (Elasticsearch, OpenSearch).
catalogsearch_fulltext indexerAttributes with is_searchable = 1:
For layered navigation:
is_filterable = 1 (category page)is_filterable_in_search = 1 (search)Catalog products are added to quotes (carts) and converted to order items during checkout.
// Add product to cart $quoteRepository->getActiveForCustomer($customerId); $quote->addProduct($product, $request); $quoteRepository->save($quote); // Quote item stores product reference $item->getProductId(); // catalog_product_entity.entity_id $item->getSku(); // Frozen at add-to-cart time $item->getProduct(); // Loads current product data
Catalog depends on CMS for widgets and category landing pages.
Categories can display CMS blocks:
landing_page attributeCatalog provides CMS widgets:
Magento_Catalog exposes comprehensive REST and GraphQL endpoints for headless commerce.
| Method | Endpoint | Description |
|---|---|---|
| GET | /V1/products/{sku} |
Get product by SKU |
| POST | /V1/products |
Create product |
| PUT | /V1/products/{sku} |
Update product |
| GET | /V1/categories/{id} |
Get category |
| GET | /V1/products/attributes |
List attributes |
query GetProduct($sku: String!) {
products(filter: { sku: { eq: $sku } }) {
items {
id
sku
name
price_range {
minimum_price {
final_price { value currency }
}
}
media_gallery {
url
label
}
... on ConfigurableProduct {
variants {
product { sku }
attributes { code label value_index }
}
}
}
}
}
query GetCategories {
categories(filters: { parent_id: { eq: "2" } }) {
items {
id
name
url_path
children {
id
name
}
}
}
}
REST requires OAuth tokens or Integration tokens. GraphQL supports anonymous (limited) and customer token authentication. Admin operations require admin token with appropriate ACL resources.