2011-01-04 36 views
7

Tengo que enumerar los productos con su categoría o categorías, solo tengo productos 'SKU' Necesito encontrar a qué categoría pertenece, por lo que quiero saber en qué magento tabla permanecerá esta información.Categoría de producto Magento

es decir: para sku 52429, se clasifica en 3 categorías. el informe mostraría todos los árboles 3 Categoría:

Bl> Cuidado del Cabello> Los productos de peinado

Bl> Natural & orgánicos> Cuidado del Cabello> Productos para el cabello

Bl> Nuestras Marcas> Pureology> Stylers

¡Gracias! Richa

Respuesta

8

Las categorías de Magento se almacenan en catalog_category_entity (pk es entity_id). Para encontrar la relación entre un producto y una categoría, use catalog_category_product. Su estructura es simple:

+-------------+------------+----------+ 
| category_id | product_id | position | 
+-------------+------------+----------+ 
|   3 |   5 |  1 | 
|   3 |   6 |  1 | 
|   3 |   7 |  1 | 
+-------------+------------+----------+ 

Por lo tanto, para obtener todas las categorías de producto:

select cc.* from catalog_category_entity cc 
    join catalog_category_product cp on cc.entity_id = cp.category_id 
    where cp.product_id = {{your product id}}; 

EDITAR señalar que la información que busca (para visualizar árboles de categorías) está en la tabla de categorías en sí. Un extracto de las columnas (algunos omitidos):

+-----------+-----------+-------+----------+-------+----------------+ 
| entity_id | parent_id | path | position | level | children_count | 
+-----------+-----------+-------+----------+-------+----------------+ 
|   1 |   0 | 1  |  0 |  0 |    65 | 
|   2 |   1 | 1/2 |  1 |  1 |    64 | 
|   3 |   2 | 1/2/3 |  1 |  2 |    9 | 
|   4 |   2 | 1/2/4 |  2 |  2 |    18 | 
|   5 |   2 | 1/2/5 |  3 |  2 |    9 | 
+-----------+-----------+-------+----------+-------+----------------+ 

Usted puede utilizar dividida en esa columna path para obtener la categoría ID de todos los categorías en el camino, y cargar sus nombres para el informe.

+0

Gracias!pero Al aplicar este método, si algún producto tiene categoría como bl> skin> face, muestra dos entradas 1) bl> skin y 2) bl> skin> face, ¿tiene alguna idea de cómo manejar esto o solucionar este problema? – PHP

+0

Ese resultado de datos es correcto si el producto está en ambas categorías. ¿Puedes describir lo que esperarías ver en este caso? –

+0

Debe mostrar solo bl> skin> face b'cz face es la subcategoría final (de skin), a qué producto pertenece. (¿por qué muestra la categoría también?) – PHP

7

Primera carga hasta el modelo del producto

Ya sea por ID

$product = Mage::getModel('catalog/product')->load($id); 

o por atributos (SKU)

$product = Mage::getModel('catalog/product')->loadByAttribute('sku', '52429'); 

Ahora se puede cargar la categoría ID de

$categoryIds = $product->getCategoryIds(); 

luego a que los objetos de la categoría completa

foreach($categoryIds as $categoryId) { 
    $categories[] = Mage::getModel(’catalog/category’) 
    ->setStoreId(Mage::app()->getStore()->getId()) 
    ->load($categoryId); 
} 

Ahora para obtener la matriz de cada categoría

foreach($categories as $category) { 
    $category->getParentCategory(); 
} 

Esto es todo lo que necesita, creo.

+0

+1 por el esfuerzo y buen enfoque, pero tengo que saber toda la tabla relacionada para buscar cualquier categoría porque tengo que acceder directamente a la base de datos magento por mysql. – PHP

+1

No lo recomendaría. ¡Pero te deseo buena suerte! Publique la solución si tiene éxito, probablemente sea interesante para otros. Por supuesto, hay otra forma de hacerlo accediendo a los modelos de recursos magento que probablemente funcionarían más rápido y/o mejor. Pero no tengo tiempo ahora para resolverlo. –

Cuestiones relacionadas