# ID-Handling beim Anlegen von Produkten via Plugin

**URL:** <https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345>\
**Category:** Programmierung\
**Created:** [29. Januar 2020 um 18:29 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345 "2020-01-29T18:29:39Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![DDE](https://avatars.discourse-cdn.com/v4/letter/d/bb73d2/32.png) [@DDE](https://forum.shopware.com/u/DDE)\
**Post date:** [29. Januar 2020 um 18:29 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/1 "2020-01-29T18:29:39Z")

</div>

Hallo zusammen ,

ich bin gerade dabei über mein Plugin ein Produkt anzulegen. Diese Produkt benötigt allerdings&nbsp; noch eine Zuordnung zu meiner erstellten Custom Entity. Das Anlegen einer Custom Entity (hier : einem Car)&nbsp; wird vor dem Anlegen des Produkts durchgeführt.&nbsp; Wenn ich das richtig “verstanden” habe , dann reicht es ja aus, die passende ID des Eintrags meiner Custom Entity dem Produkt in der Upsert Methode mit zu übergeben und dann dürfte Shopwre den Rest erledigen?

Soabald ich aber über meinen unten aufgezeigten Weg versuche die IDs zu "erstellen / vergeben wird eine &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;  
&nbsp; SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row:&nbsp; … id\_car -Exception der Mapping-Tabelle geworfen.

&nbsp;

**Wie vergebe ich hier die IDs bzw. wie muss denn die Zuordnung korrekt aussehen, damit ich meine Zuordnung hinbekomme?**

Car und Produkt stehen in einer M:N-Relation “zueinander” und ist dem Bundle-Example nachempfunden.

Das habe ich hier in der “Activate” -Methode meines Plugins (Testweise):

```
// Einfügen eines Eintrags in der Custom Entity "Car"

     /** @var EntityRepositoryInterface $CarRepository */
        $CarRepository = $this->container->get('custom_car.repository');

        $carID = Uuid::randomHex();

        $CarRepository->create((
        [
            [
                "id" => $carID,
                "manufacturer" => "Audi",
                //... complete definition
            ]

        ]
        ), $activateContext->getContext());

//Einfügen des Produkts

        $productID = Uuid::randomHex();

        $productRepository = $this->container->get('product.repository');
        $productRepository->upsert([
            [
                'id' => $productID,
                'product_version_id'=>$activateContext->getContext()->getVersionId(),
                "name" => "Produkt1",
                'price' => [['currencyId' => Defaults::CURRENCY, 'gross' => 15, 'net' => 10, 'linked' => false]],
                'manufacturer' => ['name' => 'Hersteller1'],
                'tax' => ['name' => '19%', 'taxRate' => 19],
                'stock' => 2222,
                'productNumber' => "ABDSE",
              
                'cars' => [['id_car'=>$carID]]
            ]

        ],
            $activateContext->getContext()
        );

```

Für Hilfe bin ich sehr Dankbar!!

&nbsp;

---

<div class="post-metadata">

**Author:** ![kanuma](https://avatars.discourse-cdn.com/v4/letter/k/ce7236/32.png) [@kanuma](https://forum.shopware.com/u/kanuma)\
**Post date:** [24. August 2020 um 09:56 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/2 "2020-08-24T09:56:30Z")

</div>

push

---

<div class="post-metadata">

**Author:** ![Rakowu](https://avatars.discourse-cdn.com/v4/letter/r/7993a0/32.png) [@Rakowu](https://forum.shopware.com/u/Rakowu)\
**Post date:** [17. März 2021 um 13:46 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/3 "2021-03-17T13:46:17Z")

</div>

push

Die einzige Lösung die mir einfällt (unschön…) ist über ein Criteria() die id zu erhalten und per patch die Zuordnung zu machen… Mir gefällt dieser Ansatz nur nicht da es redundant ist.

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [17. März 2021 um 14:01 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/4 "2021-03-17T14:01:06Z")

</div>

Öhmmm… die IDs sind nicht umsonst GUIDs.  
Erstell dir einfach eine. Die kannste jederzeit aus dem Hut zaubern.  
Und dann beim anlegen des Produktes mitgeben.

Dadurch dass GUIDs absolut eindeutig sind besteht keine Gefahr dass du hier was doppelt erzeugst oder gar eine vorhandene GUID bekommst.

---

<div class="post-metadata">

**Author:** ![Rakowu](https://avatars.discourse-cdn.com/v4/letter/r/7993a0/32.png) [@Rakowu](https://forum.shopware.com/u/Rakowu)\
**Post date:** [20. März 2021 um 22:58 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/5 "2021-03-20T22:58:39Z")

</div>

Oh stimmt, super Idee. Jetzt muss ich nur mal blöd fragen weil ich noch nicht so fit mit der Thematik bin. Wie kann man die Guid nachträglich wieder erhalten (z.b. einen Tag später)? Bei produkten gibt es ja leider nicht die Methode getId(). Ich würde gerne einen Abgleich machen zwischen Produkten die bereits angelegt wurden und die die noch angelegt werden müssen.  
Guids im Array speichern und Cachen? Vermutlich unsicher?

---

<div class="post-metadata">

**Author:** ![ThomasChr](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/thomaschr/32/10466_2.png) [@ThomasChr](https://forum.shopware.com/u/ThomasChr)\
**Post date:** [22. März 2021 um 07:41 UTC](https://forum.shopware.com/t/id-handling-beim-anlegen-von-produkten-via-plugin/64345/6 "2021-03-22T07:41:14Z")

</div>

Naja, jede Suche über die API liefert dir natürlich auch die ID.  
Aber die ID ändert sich nicht, das heißt das lokal speichern ist durchaus eine valide Idee, meiner Meinung nach.
