# API - Kategorien

**URL:** <https://forum.shopware.com/t/api-kategorien/21596>\
**Category:** Shopware 3.5\
**Tags:** programming\
**Created:** [28. Juli 2014 um 19:19 UTC](https://forum.shopware.com/t/api-kategorien/21596 "2014-07-28T19:19:45Z")\
**Posts on this page:** 10\
**Page:** 1

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [28. Juli 2014 um 19:19 UTC](https://forum.shopware.com/t/api-kategorien/21596/1 "2014-07-28T19:19:45Z")

</div>

Hallo zusammen, ich brauche eure Unterstützung beim logischen Import/Update von Kategorien. Es geht um ca. 15t Artikel, welche 3 mal am Tag eingelesen werden. Die CSV hat immer 3 Spalten welche die Kategorie Struktur abbilden. Kat-A,Kat-B,Kat-C Also immer 3 Ebenen. Mit der alten API konnte man einfach die Kategrie erstellen, wenn es diese noch nicht gab wurde die Kategorie angelegt oder bene upgedatet. Das war so sehr praktisch. Nun muss ich das irgendwie kombinieren / abfragen, was etwas kompliziert ist. Ich muss per SQL prüfen ob es Kat-A gibt, welche als ParentID 3 hat. Wenn dies nicht der Fall ist anlegen. Somit kann es Ebene 2 und 3 (Kat-B und Kat-C) ebenfalls noch nicht geben und müssen angelegt werden. Gibt es Kat-A so geht das Spiel weiter mit Kat-B und der ID Kat-A als ParentID etc. Hat sowas ähnliches schon mal jemand umgesetzt? Wie würden ihr das am schlausten machen? Danke für euer Feedback.

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [28. Juli 2014 um 20:11 UTC](https://forum.shopware.com/t/api-kategorien/21596/2 "2014-07-28T20:11:17Z")

</div>

Hi, in unserer Standard API machen wir sowas in der Art hier: \Shopware\Components\Api\Resource\Category::findCategoryByPath Vielleicht hilft dir das ja schon weiter? Grundsätzlich kannst du ab Shopware 4.1 auch mit dem “path” field in der s\_categories arbeiten - dort findet sich der Kategorie-Pfad einer jeden Kategorie denormalisiert in dem Format “|11|5|3|” - in diesem Fall wäre die Kategorie in der Kategorie 11, die wiederum in 5, die wiederum in 3 ist. Schöne Grüße Daniel

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [28. Juli 2014 um 20:15 UTC](https://forum.shopware.com/t/api-kategorien/21596/3 "2014-07-28T20:15:15Z")

</div>

Hi Daniel, ich müsste aber zu dem Pfad noch den Namen parallel abfragen, sonst macht es kein Sinn, oder was meinst du? Anhand dem Pfad bekomme ich ja alle Kategorien zurück geliefert, die diesen haben. Danke Gesendet von meinem iPhone mit Tapatalk

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [28. Juli 2014 um 20:23 UTC](https://forum.shopware.com/t/api-kategorien/21596/4 "2014-07-28T20:23:03Z")

</div>

Hi, wenn ich dich richtig verstehe, brauchst du ja genau sowas: Deutsch-\>Tee und Kaffe-\>Tee und möchtest das entweder erzeugen oder laden, wenn es das schon gibt, oder? In dem Fall kannst du dich doch eigentlich an dem von mir verlinkten Beispiel aus der Category-Resource orientieren, oder? Da wird ja genau das gleiche gemacht. Der Ansatz mit dem „path“ geht natürlich erstmal von IDs aus - das stimmt. Aber die Logik der Category-Ressource müsste für dich doch passen. lG Daniel

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [29. Juli 2014 um 08:00 UTC](https://forum.shopware.com/t/api-kategorien/21596/5 "2014-07-29T08:00:42Z")

</div>

Hi Daniel, ich kann wenn ich GitHub durchsuche nichts zu findCategoryByPath finden. Bzw. finde ich auch in [https://github.com/ottscho/shopware-4/b … tegory.php](https://github.com/ottscho/shopware-4/blob/master/engine/Shopware/Components/Api/Resource/Category.php) nicht die Funktion. Wo versteckt sich die Funktion? Danke dir.

---

<div class="post-metadata">

**Author:** ![DanielNogel](https://avatars.discourse-cdn.com/v4/letter/d/96bed5/32.png) [@DanielNogel](https://forum.shopware.com/u/DanielNogel)\
**Post date:** [29. Juli 2014 um 08:24 UTC](https://forum.shopware.com/t/api-kategorien/21596/6 "2014-07-29T08:24:28Z")

</div>

Hi, die Funktion ist seit Dezember 2013 drin, dein Branch ist veraltet. Siehe hier: [https://github.com/shopwareAG/shopware- … y.php#L241](https://github.com/shopwareAG/shopware-4/blob/master/engine/Shopware/Components/Api/Resource/Category.php#L241) lG Daniel

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [29. Juli 2014 um 09:26 UTC](https://forum.shopware.com/t/api-kategorien/21596/7 "2014-07-29T09:26:44Z")

</div>

Oh shit. Danke :thumbup:

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [2. September 2014 um 11:18 UTC](https://forum.shopware.com/t/api-kategorien/21596/8 "2014-09-02T11:18:50Z")

</div>

Hi Daniel, ich habe noch ein Problem mit den Kategorien. Bei meinem Demoshop SW 4.3 funktioniert das \Shopware\Components\Api\Resource\Category::findCategoryByPath bestens. Hier gebe ich den String Deutsch|Genusswelt|Edelbrände zum Test mit und ich erhalte die Kategorie. Mache ich das bei einem anderen Shop (auch SW 4.3) so schmiert mir alles bei hier ab: $categoryModel = $this-\>getRepository()-\>findOneBy(array(‘name’ =\> $categoryName, ‘parentId’ =\> $parentId)); Und zwar bei Deutsch - 1. Hier muss irgendwas mit den Models nicht passen. Hast du eine Idee wie ich das lösen kann? Wenn ich im String Deutsch| weglasse, so schmiert mir nichst ab und ich bekomme NULL zurück. Ich komme leider nicht weiter.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [2. September 2014 um 14:19 UTC](https://forum.shopware.com/t/api-kategorien/21596/9 "2014-09-02T14:19:46Z")

</div>

okay, ich habe nun alle Kategorien gelöst und neu aufgebaut. Jetzt klappt die Abfrage ob es den Path gibt. Aber das anlegen, falls nicht vorhanden klappt nicht. [quote] $test = “Deutsch|Freizeitwelten|Vintage2”; try { $categoryResource = \Shopware\Components\Api\Manager::getResource(‘Category’); $temp = $categoryResource-\>findCategoryByPath($test, true); //var\_dump($temp); } catch (Exception $e) { echo $e-\>getMessage(); } [/quote] Leerseite ohne Rückgabewert oder Fehler.

---

<div class="post-metadata">

**Author:** ![ottscho](https://avatars.discourse-cdn.com/v4/letter/o/7ba0ec/32.png) [@ottscho](https://forum.shopware.com/u/ottscho)\
**Post date:** [2. September 2014 um 17:53 UTC](https://forum.shopware.com/t/api-kategorien/21596/10 "2014-09-02T17:53:12Z")

</div>

okay, es fehlt mal wieder das flush(). jetzt geht es.
