2011-01-04 11 views
7

Muszę wymienić produkty z kategorii lub kategorii, mam tylko produkty "SKU przez to muszę znaleźć, do której kategorii należy, więc chcę wiedzieć, w którym tabeli magento pozostają te informacje.Kategoria produktów Magento

czyli: dla sku 52429, jest podzielone na 3 kategorie. raport pokaże wszystkie 3 drzewach kategorii:

Bl> Pielęgnacja włosów> produktów do stylizacji

Bl> Naturalne & organiczne> Pielęgnacja włosów> Stylizacja Produkty

bl> Nasze marki> Pureology> stylizacji

Dzięki! Richa

Odpowiedz

8

Kategorie Magento są przechowywane w catalog_category_entity (pk jest entity_id). Aby znaleźć związek między produktem a kategorią, użyj catalog_category_product. Jego konstrukcja jest prosta:

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

Tak więc, aby uzyskać wszystkie kategorie produkt:

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}}; 

EDIT, aby pamiętać, że informacji szukasz (aby wyświetlić kategorię drzew) jest sama tablica kategorii. Fragment kolumny (niektóre pominięte):

+-----------+-----------+-------+----------+-------+----------------+ 
| 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 | 
+-----------+-----------+-------+----------+-------+----------------+ 

Można użyć podziału na tej kolumnie path uzyskać identyfikatory kategoria wszystkie kategorie w ścieżce i załadować swoje nazwy dla raportu.

+0

Dzięki!ale stosując tę ​​metodę, jeśli jakikolwiek produkt ma kategorię jak bl> skóra> twarz, pokazuje dwa wpisy 1) bl> skóra i 2) bl> skóra> twarz, czy masz pojęcie, jak sobie z tym poradzić lub rozwiązać ten problem. – PHP

+0

Ten wynik danych jest poprawny, jeśli produkt należy do obu kategorii. Czy mógłbyś opisać, czego mógłbyś się spodziewać w tym przypadku? –

+0

Powinna wyświetlać tylko bl> skin> face face b'cz face to final subcategory (of skin), do której należy produkt. (dlaczego także pokazuje kategorię?) – PHP

7

pierwsze obciążenie aż model produktu

Albo przez ID

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

lub atrybutu (SKU)

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

Teraz można załadować identyfikatory kategorii

$categoryIds = $product->getCategoryIds(); 

Następnie, aby uzyskać pełny kategoria obiektów

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

Teraz aby uzyskać rodzica każdej kategorii

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

To wszystko trzeba myślę.

+0

+1 za wysiłek i dobre podejście, ale muszę znać wszystkie powiązane tabele, aby pobrać dowolną kategorię, ponieważ mam bezpośredni dostęp do bazy danych magento przez mysql. – PHP

+1

Nie polecam tego. Ale życzę ci powodzenia! Opublikuj rozwiązanie, jeśli ci się uda, prawdopodobnie byłoby to interesujące dla innych. Jest oczywiście inny sposób na to, poprzez dostęp do modeli zasobów magento, które prawdopodobnie działałyby szybciej i/lub lepiej. Ale nie mam teraz czasu, żeby to rozgryźć. –

Powiązane problemy