# Zu lange Ladezeiten bei Produkt auslesen/update via bin/console

**URL:** https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556
**Category:** Shopware 6 (German)
**Created:** [16. Juli 2024 um 09:06 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556 "2024-07-16T09:06:19Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Nilik](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/nilik/32/24768_2.png) [@Nilik](https://forum.shopware.com/u/Nilik)
#### Post date: [16. Juli 2024 um 09:06 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/1 "2024-07-16T09:06:19Z")

</div>

Hallo,

und zwar möchte ich alle Produkte auslesen und einen Wert aus dem Produkt in einem CustomField-Feld einen Wert einsetzen.

Hier mein Code:

```auto
        $criteria = new Criteria();
        $criteria->addFilter( new EqualsFilter('active', true ) );
        $criteria->addFilter( new EqualsFilter('customFields.custom_delivery', NULL ) );
        $criteria->addFilter( new NotFilter( NotFilter::CONNECTION_AND, [new EqualsFilter('deliveryTimeId', null)] ) );
        $context = Context::createDefaultContext();

        $result = $this->productRepository->search( $criteria, $context );

        if ( $result !== null && $result->getTotal() > 0 ) {
            foreach ($result->getElements() as $product) {
                $deliveryName = '';

                if ($product->getDeliveryTimeId() != '') {
                    $criteriaDt = new Criteria();
                    $criteriaDt->addFilter( new EqualsFilter('deliveryTimeId', $product->getDeliveryTimeId()) );
                    $contextDt = Context::createDefaultContext();

                    $resultDt = $this->deliveryTimeTranslation->search( $criteriaDt, $contextDt );

                    if ( $resultDt !== null && $resultDt->getTotal() > 0 ) {
                        foreach ($resultDt->getElements() as $delivery) {
                            $deliveryName = $delivery->getName();
                        }
                    }

                    $updateProduct = [];
                    $updateProduct['id'] = $product->getId();
                    $updateProduct['customFields']['custom_delivery'] = $deliveryName;

                    $setProduct[] = $updateProduct;

                    $this->productRepository->update( $setProduct, $context );
                }
            }
        }

```

Wenn ich nun bin/console ausführe, brauch das Skript pro Produkt um die 2-3 Sekunden, bis es fertig bearbeitet ist. Bei über 10.000 Produkten (inkl. Varianten) dauert das eine Ewigkeit. Ich würde gern verstehen, warum das so lange dauert. Jedoch kann ich an meinem Code kein Fehler sehen. Es ist alles gemäß Doku umgesetzt wurden.

Das Skript ist in der execute-Methode. Hier wird nichts weiter gemacht. Keine Wechselwirkungen möglich.

Wer kann helfen und sieht mein Fehler?

Beste Grüße  
Nilik

---

<div class="post-metadata">

### Author: ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)
#### Post date: [16. Juli 2024 um 09:14 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/2 "2024-07-16T09:14:32Z")

</div>

Ein Update eines Produkts löst immer eine Reihe an nachfolgenden Prozessen aus (z.B. Cache leeren, product indexer etc pp). Hier solltest du nicht jedes Produkt in einer Schleife einzeln aktualisieren, sondern z.B. immer 100 Produkte sammeln und dann zusammen updaten.

Viele Grüße

---

<div class="post-metadata">

### Author: ![Nilik](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/nilik/32/24768_2.png) [@Nilik](https://forum.shopware.com/u/Nilik)
#### Post date: [16. Juli 2024 um 09:26 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/3 "2024-07-16T09:26:38Z")

</div>

> [@Nilik](#):
>
> `$this->productRepository->update( $setProduct, $context );`

Das heißt, dass muss außerhalb der `foreach`-Schleife und `$setProduct` muss dann das große array sein?

---

<div class="post-metadata">

### Author: ![EikeBrandtWarneke](https://avatars.discourse-cdn.com/v4/letter/e/cdc98d/32.png) [@EikeBrandtWarneke](https://forum.shopware.com/u/EikeBrandtWarneke)
#### Post date: [16. Juli 2024 um 09:28 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/4 "2024-07-16T09:28:22Z")

</div>

Mach ein $update array, das die $setProduct sammelt und außerhalb der Schleife prüfst du, ob du bereits 100 Elemente hast. Falls ja: mach das update und leere das array.

Viele Grüße

---

<div class="post-metadata">

### Author: ![Nilik](https://dub1.discourse-cdn.com/flex013/user_avatar/forum.shopware.com/nilik/32/24768_2.png) [@Nilik](https://forum.shopware.com/u/Nilik)
#### Post date: [16. Juli 2024 um 09:32 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/5 "2024-07-16T09:32:55Z")

</div>

Danke. Das ist die Lösung. 👍

---

<div class="post-metadata">

### Author: ![system](https://europe1.discourse-cdn.com/flex013/uploads/shopware/original/3X/2/9/29c7587ba660f00e4995d1743162782e5d6d8653.svg) [@system](https://forum.shopware.com/u/system)
#### Post date: [15. August 2024 um 09:33 UTC](https://forum.shopware.com/t/zu-lange-ladezeiten-bei-produkt-auslesen-update-via-bin-console/104556/6 "2024-08-15T09:33:53Z")

</div>

Dieses Thema wurde automatisch 30 Tage nach der letzten Antwort geschlossen. Es sind keine neuen Antworten mehr erlaubt.
