productRepository->upsert() vermisst variantID?

Für eine Schnittstelle versuche ich,Produkte via upsert() anzulegen.

Dabei halte ich mich an https://docs.shopware.com/en/shopware-platform-dev-en/how-to/updating-entities-dal (wobei “id” als “Id” geschrieben werden muss).

Upsert() sollte idempotent sein, der zweite Aufruf mit denselben Daten sollte keinen Effekt zeigen. Stattdessen bekomme ich die Exception 

[PDOException (23000)]                                                                                                                                                        
  SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry ‘103486-\x0F\xA9\x1C\xE3\xE9jK\xC2\xBEK\xD9\xCEu,4%’ for key ‘uniq.product.product_number__version_id’  
   

Wie kann ich das verhindern?

Danke

Hey,

Dabei halte ich mich an https://docs.shopware.com/en/shopware-platform-dev-en/how-to/updating-entities-dal (wobei „id“ als „Id“ geschrieben werden muss).

Muss es? Die ganze Zeit wenn ich mit dem upsert arbeite muss „id“ auch „id“ heißen. (Eigentlich immer der Property Name in der Definition. In dem Fall ProductDefinition)

Dadurch das du das mit einem großen „I“ schreibst, ist meine Vermutung das er immer neue Produkte anlegt, mit derselben ProduktNummer - und das sagt deine Fehlermeldung auch nur aus.

Sollte das nicht das Problem sein, zeige bitte auch ein bisschen mehr vom upsert um etwaige Probleme auszuschließen.

Hey @dominikmank‍,

 

vielen Dank. Ich habe jetzt alle Schreibweisen durch - es macht beim Upsert keinen Unterschied, beim Create ging es tatsächliich nur mit „Id“. (Wie es hier jemand feststellte, allerdings ohne Begründung.)

Der Code ist

$aNewEntity = [
  'productNumber' => '103486',
  'active' => '0',
  'stock' => 0,
  'taxId' => '64f756fac0a5458f81e00493de59bbb0',
  'price' =>[[
      'currencyId' => 'b7d2554b0ce847cd82f3ac9bd1c0dfca',
      'gross' => 0,
      'net' => 0,
      'linked' => false,
    ],],
  'name' =>[
    'b5a44b5363a74a6a967763c4ba7d678c' => 'Lorem',
    '2fbb5fe2e29a4d70aa5854ce7ce3e20b' => 'Ipsum',
  ],
  'id' => '6d00c5f30a6329e24d2ece9d3ab4d03e',
]

$this->productRepository->upsert([$aNewEntity], Context::createDefaultContext());

Das erstmalige Insert funktioniert anstandslos, nur eben kein Update hinterher. 
 

Hey @euroxid‍,

ich habe jetzt deinen Codeschnipsel genommen und habe den einmal in einen Command von mir gepackt und halt nur die Ids ausgetauscht mit gütigen Werten aus meiner Instanz.

Als Basis habe ich das shopware/development Template und eine Nackige Installation.

Der Code ist hier

 

Bei mir läuft der Code mit doppelten Upsert anstandslos durch, sobald ich allerdings das Feld  id  auf  Id  wechsele, bekomme ich denselben Fehler wie du, aber da meintest du ja daran liegt es nicht. Ich bin zugegebenermaßen ratlos. Ich habe das ganze mit der Version 6.3.2.1 und 6.3.3.0 getestet…

Hallo Dominik,

 

vielen herzlichen Dank für Deine Mühe. Ich bin endlich dahinter gekommen: Du hast recht und es muss id heißen - „Id“ hatte den Fehler nur behoben, weil ich damit keine gültige „id“ übermittelte, und Shopwares upsert() kurzerhand ein neues erzeugt hat. Dadurch war der Konflikt scheinbar behoben, nicht aber die gewünschte Funktion hergestellt. Dahintergekommen bin ich dank Deiner Hartnäckigkeit, es doch mit „id“ zu versuchen.

 

Viele Grüße