# Replacing associated data

**URL:** <https://forum.shopware.com/t/replacing-associated-data/98609>\
**Category:** Programmierung\
**Created:** [19. Februar 2023 um 10:57 UTC](https://forum.shopware.com/t/replacing-associated-data/98609 "2023-02-19T10:57:01Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![chamaw](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@chamaw](https://forum.shopware.com/u/chamaw)\
**Post date:** [19. Februar 2023 um 10:57 UTC](https://forum.shopware.com/t/replacing-associated-data/98609/1 "2023-02-19T10:57:01Z")

</div>

Es geht um das Setzen von Kategorien zu einem Artikel. Wir machen das über ein externes System.  
Hier speichern wir dann die Kategorien-Zuordnung und senden diese via API an Shopware.

Das „Problem“ ist das unter [Replacing associated data - Shopware Developer](https://developer.shopware.com/docs/guides/plugins/plugins/framework/data-handling/replacing-associated-data) beschriebene.

Da wir nicht wissen, ob der Artikel schon Kategorien hat (oder vom aktuellen Stand unabhängige) müsste man dann zuerst die alten Daten löschen und dann neu setzen. Am Ende summieren sich die Calls !

In SW5 gab es noch einen extra Parameter mit „replace“, der dann das ganze in der API gelöst hat. Vermutlich in SW6 „weg-optimiert“ oder ?

Wenn man das Ganze auf einen Sync-Call umbaut, wäre dann sichergestellt, dass die Operationen in der angegebenen Reihenfolge ablaufen:

- DELETE all categories for productId
- UPSERT categories

Tatsächlich braucht es ja 3 Calls. der Primary Key für product\_categories ist zusammen gesetzt. Sprich ist einziges SQL statement ala „delete where product\_id“ funktioniert eben nicht. Also erstmal den aktuellen Stand abrufen, dann ein Sync-Delete und schließlich das Update mit den neuen Kategorien …

---

<div class="post-metadata">

**Author:** ![aggrosoft](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/aggrosoft/32/23875_2.png) [@aggrosoft](https://forum.shopware.com/u/aggrosoft)\
**Post date:** [27. Februar 2023 um 15:06 UTC](https://forum.shopware.com/t/replacing-associated-data/98609/2 "2023-02-27T15:06:58Z")

</div>

Nein da gibt es nichts, du musst bei allen Relationen vorher die aktuellen Daten abholen und dann eine Art Sync selbst implementieren der überflüssige entfernt und neue hinzufügt.

Das sind aber eigentlich „nur“ 2 Calls - denn dafür gibt es die sync API

---

<div class="post-metadata">

**Author:** ![chamaw](https://avatars.discourse-cdn.com/v4/letter/c/b487fb/32.png) [@chamaw](https://forum.shopware.com/u/chamaw)\
**Post date:** [27. Februar 2023 um 16:47 UTC](https://forum.shopware.com/t/replacing-associated-data/98609/3 "2023-02-27T16:47:40Z")

</div>

Bist Du Dir sicher, dass zumindest die sequence Reihenfolge im sync-call eingehalten wird ? sprich das cmd das zuerst im JSON kommt wird auch als erstes abgearbeitet ?  
Da betrifft ja nicht nur die Kategorien, sondern ja auch die Medien …

---

<div class="post-metadata">

**Author:** ![aggrosoft](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/aggrosoft/32/23875_2.png) [@aggrosoft](https://forum.shopware.com/u/aggrosoft)\
**Post date:** [28. April 2023 um 12:09 UTC](https://forum.shopware.com/t/replacing-associated-data/98609/4 "2023-04-28T12:09:24Z")

</div>

Ja die Reihenfolge wird eingehalten, zumindest läuft das bei mir so.
