2011-01-04 7 views
7

Ich muss Produkte mit seiner Kategorie oder Kategorien auflisten, ich habe nur die Artikelnummer von Produkten Ich muss herausfinden, zu welcher Kategorie gehört, also möchte ich wissen, in welcher Magento-Tabelle diese Informationen bleiben.Magento Produktkategorie

dh: für sku 52429 ist es in 3 Kategorien eingeteilt. Der Bericht würde zeigen alle drei Kategoriebäume:

Bl> Hair Care> Styling Produkte

Bl> Natur & Organisch> Hair Care> Styling Produkte

Bl> Unsere Marken> Pureology> Styler

Danke! Richa

Antwort

8

Magento-Kategorien sind in catalog_category_entity gespeichert (pk ist entity_id). Verwenden Sie catalog_category_product, um die Beziehung zwischen einem Produkt und einer Kategorie zu finden. Seine Struktur ist einfach:

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

Also, alle Kategorien für ein Produkt zu erhalten:

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 zu beachten, dass die Informationen, die Sie suchen (Kategorie Bäume anzuzeigen) ist in die Kategorietabelle selbst. Ein Auszug aus den Spalten (etwas weggelassen):

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

Sie Split auf dieser path Spalte verwenden können, um das Kategorie-IDs aller Kategorien auf dem Weg zu bekommen, und für den Bericht ihre Namen laden.

+0

Danke!Aber wenn diese Methode angewendet wird, wenn ein Produkt eine Kategorie wie bl> skin> face hat, zeigt es zwei Einträge 1) bl> skin und 2) bl> skin> face, haben Sie eine Idee, wie Sie damit umgehen oder dieses Problem beheben. – PHP

+0

Dieses Datenergebnis ist korrekt, wenn das Produkt in beiden Kategorien enthalten ist. Können Sie bitte beschreiben, was Sie in diesem Fall erwarten würden? –

+0

Es sollte nur angezeigt bl> Haut> Gesicht b'cz Gesicht ist die endgültige Unterkategorie (der Haut), welches Produkt gehört. (Warum zeigt es auch Kategorie?) – PHP

7

Erste Last bis das Produktmodell

Entweder durch ID

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

oder Attribut (SKU)

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

Jetzt können Sie die Kategorie IDs laden

$categoryIds = $product->getCategoryIds(); 

Dann wird die vollständige Kategorie

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

nun die Eltern jeder Kategorie

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

Das ist alles, was Sie denken, ich brauche zu bekommen.

+0

+1 für die Mühe und guten Ansatz, aber ich muss alle verwandten Tabelle zu jeder Kategorie abrufen, weil ich direkt auf die Magento-Datenbank von MySQL zugreifen muss. – PHP

+1

würde ich nicht empfehlen. Aber ich wünsche dir viel Glück! Veröffentlichen Sie die Lösung, wenn Sie erfolgreich sind, würde es wahrscheinlich für andere interessant sein. Es gibt natürlich eine andere Möglichkeit, dies zu tun, indem auf die Magento-Ressourcenmodelle zugegriffen wird, die wahrscheinlich schneller und/oder besser arbeiten würden. Aber ich habe jetzt nicht die Zeit, es herauszufinden. –

Verwandte Themen