Configurator Options updaten via Sync Api

Hallo,

nach einem Update von 6.3.5 auf 6.4.5 habe ich folgendes Problem:

Ich kann Artikel über die Sync Api anlegen. Configuratoroptions werden im selbem Request mitgegeben. (Haben alle eine eindeutige ID)Eintrag funktioniert, im Frontend und Backend schaut alles gut aus. Sobald ich jedoch den selben Artikel mit dem selben Request updaten will (upsert) bekomme ich folgende Meldung:

An exception occurred while executing ‚INSERT INTO property_group_option (id, property_group_id, created_at) VALUES (‚�x���fK��L�"2\‘,‚�’�R��m���Ȓ�‘,‚2021-10-07 11:53:30.488‘);‘:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‚\x9Cx\xDC\xD5\xD9fK\xEE\xA0\xCCL\xE2\xB1"2‘ for key ‚property_group_option.PRIMARY‘".

UND

An exception occurred while executing ‚INSERT INTO product_configurator_setting (id, version_id, product_id, product_version_id, property_group_option_id, created_at) VALUES (‚�A�өB?��$�j��m‘,‚���jK¾K��u,4%‘,‚�����b�CU���‘,‚���jK¾K��u,4%‘,‚q}�٬lg%��1]a�‘,‚2021-10-07 11:55:56.523‘);‘:

SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‚\xB3\xFF\x03\xD5\xF3\x08\xEAb\xD1CU\xF8\xF6\x7F\x0F\x95-\x0F\xA9‘ for key ‚product_configurator_setting.uniq.product_configurator_setting.prod_id.vers_id.prop_group_id‘"

Sollte er nicht updaten wenns den Key schon gibt? Hat jemand eine Idee, was sich seit 6.3.5 geändert haben könnte?

Es gibt bereits ein Ticket dazu: Shopware Issuetracker

Mit sowas hier klappt’s wieder:

Das Thema ist leider bis heute nicht erledigt.
Hat jeman eine Idee?

Ich mach schon was ziemlich ähnliches wie @styleflasher :


  private function getProductConfiguratorSetting(string $productId, string $propertyGroupOptionId, $context) : array {
    $criteria = new Criteria();
    $criteria->addFilter(new EqualsFilter('productId', $productId));
    $criteria->addFilter(new EqualsFilter('optionId', $propertyGroupOptionId));
    $productConfiguration = $this->productConfiguratorSettingRepository->search($criteria, $context)->first();

    if ($productConfiguration) {
      return ['id' => $productConfiguration->getId(), 'optionId' => $propertyGroupOptionId, 'productId'=>$productId];
    } else {
      return ['optionId' => $propertyGroupOptionId, 'productId'=>$productId];
    }
  }

aber der witz ist es wird bei initalen import nicht mal gespeichert also findet es gar keine configurations und trotzdem bekomme ich sp$ter beim productRepository->upsert diese Duplicate Entry Meldung,

und warum wird da von der prop_group_id gesprochen? die gibts ja gar nicht in der Tabele (aber in den indexes)