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:
$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