Replacing associated data

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

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

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 …

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