ProductRepository liefert fragwürdige Preise zurück

Hallo zusammen,

ich habe einen Controller welcher via Ajax aufgerufen wird und einen Produktpreis zurückliefern soll.

$productId = $request->get('id');

$result = $this->entityRepository->search(new Criteria([$productId]), Context::createDefaultContext());
var_dump($productId, $result->getEntities()->first()->getId(), $result->getEntities()->first()->getPrice());exit;

572 wäre der zu erwartende Preis, zurückgeliefert wird aber 

string(32) “818e3e59870b4ee9bf7ce11b3bdfd7b0”
string(32) “818e3e59870b4ee9bf7ce11b3bdfd7b0”
object(Shopware\Core\Framework\DataAbstractionLayer\Pricing\PriceCollection)#4953 (2) {
  [“elements”:protected]=>
  array(1) {
    [“b7d2554b0ce847cd82f3ac9bd1c0dfca”]=>
    object(Shopware\Core\Framework\DataAbstractionLayer\Pricing\Price)#4952 (6) {
      [“currencyId”:protected]=>
      string(32) “b7d2554b0ce847cd82f3ac9bd1c0dfca”
      [“net”:protected]=>
      float(823.36448598131)
      [“gross”:protected]=>
      float(881)
      [“linked”:protected]=>
      bool(true)
      [“listPrice”:protected]=>
      NULL
      [“extensions”:protected]=>
      array(0) {
      }
    }
  }
  [“extensions”:protected]=>
  array(0) {
  }
}
 

 

Es spielt dabei keine Rolle, ob ich den SalesChannelContext der Request verwende oder den DefaultContext, oder ob ich product.price als Association der Criteria hinzufüge. Das Ergebnis bleibt immer das gleiche. Ich kann mir nicht erklären woher dieser Preis kommt, da er weder mit den in der Datenbank hinterlegten Preisen, noch mit irgendeinem Currencyfactor zusammenpasst.

Wie kann es sein, dass ein “direkt” aus der Datenbank über das EntityRepo abgefragter Preis nicht dem entspricht was wirklich in der Datenbank steht?

Wenn ich den ProductLoader verwende um das Produkt zu laden, wird der korrekte Preis zurückgegeben.

Ich arbeite in der Entwicklungsumgebung mit SW6.1.1 mit Demodaten.

Hallo,

hast du für diesen Produkt “Erweitere Preise” eingestellt? Diese befinden sich in der “product_price” Tabelle. Falls diese Preise gesetzt sind, wird der Fallback Preis, der sich direkt in der “product” Tabelle befindet, überschrieben. 

Viele Grüße aus Schöppingen

cool Michael Telgmann

1 „Gefällt mir“

Hallo Michael,

da hast Du mir schonmal erklärt wo der Preis herkommt. Ja für das Produkt sind erweiterte Preise hinterlegt (die im Screenshot). Die 881 kommen direkt aus der Produkt Tabelle.

Müssten dann aber nicht mit der Association product.price, die erweiterten ausgeliefert werden?

Hallo,

diese sollten dann eigentlich mit \Shopware\Core\Content\Product\ProductEntity::getPrice s () zu bekommen sein. Die Association dann wie folgt hinzufügen: $criteria->addAssociation(‘prices’);

Viele Grüße aus Schöppingen

cool Michael Telgmann

Ah ok, dann überschreiben sie sich nicht sondern stehen dann unter prices, dann habe ich falsch geschaut und den Preis in der Product Tabelle komplett übersehen. 

vielen Dank!