Preise fehlen beim Auslesen des Produkts

Hallo,

wir selektieren nach eigenen Kriterien Produkte und möchten diese dann darstellen.

Dazu haben wir nach dieser Anleitung

die Produkte abgefragt. Das funktioniert soweit. Allerdings fehlen die Preis-Informationen.

Ich habe mal zum Vergleich auf der regulären Such-Seite gedumpt:
image

Da sind Felder wie calculatedPrices, calculatedPrice, calculatedCheapestPrice, etc. enthalten.

Bei meinem Product fehlen diese Daten:

image

Mein Code sieht so aus:

public function getProductById(SalesChannelContext $salesChannelContext, string $productId){
  $criteria = new Criteria();
  $criteria->addFilter(new EqualsFilter('id', $productId));
  $criteria->addAssociation('media');
  $criteria->addAssociation('cover');
  $criteria->addAssociation('prices');
  $criteria->addAssociation('tax');
  
  $product =  $this->productRepository->search($criteria, $salesChannelContext->getContext())->first();
  
  return $product;
}

Was fehlt hier? Wie bekomme ich die calculated Preise in mein Produkt?

Für die Darstellung würde ich gerne Folgendes benutzen:

{% sw_include '@Storefront/storefront/component/product/card/box.html.twig' with {
                        layout: boxLayout,
                        displayMode: displayMode
                    } %}

Aber hier steht dann bei Preis 0 EUR. Hier wird auf calculatedPrice zugegriffen.

Hier die Lösung, falls es jemanden interessiert:

Der Hinweis von lukvai hier hat mich auf die richtige Fährte gebracht:

In der service-Definition muss es

<argument type="service" id="sales_channel.product.repository"/>

statt

<argument type="service" id="product.repository"/>     

heißen.

In der Klasse dann auch entsprechend:

use Shopware\Core\System\SalesChannel\Entity\SalesChannelRepository;
...
public function __construct(SalesChannelRepository $productRepository)
    {
...

Und in der search-function muss statt context salesChannelContext verwendet werden:

$product =  $this->productRepository->search($criteria, $salesChannelContext)->first();

statt

$product =  $this->productRepository->search($criteria, $salesChannelContext->getContext())->first();

Danke an lukvai :+1: