Pracuję nad rozszerzeniem płatności M2, aby nasz sprzedawca potrzebował nas, aby wraz z zamówieniem przesłać szczegóły produktu
Wszystko działa dobrze, ale $order->getAllItems();
lub $order->getAllVisibleItems();
zwracanie prostych i konfigurowalnych produktów nadrzędnych tak
jeśli mam 2 produkty w koszyku
- 1 prosty produkt
- 1 Powiązany z konfigurowalnym produktem
więc zamiast dostać dwa produkty, otrzymuję trzy; jeden prosty, powiązany produkt i jego produkt macierzysty;
Mogę spróbować wyodrębnić prawidłowe produkty, ale jestem pewien, że to musi być jakiś inny
/** @var \Magento\Sales\Model\Order $order */
$order = $payment->getOrder();
/**
* Get All Items of Products
*/
$productItems = $order->getAllItems() // returning 3 products where I have 2 in cart
$productItemsTest = $order->getAllVisibleItems(); // returning 3 products where I have 2 in cart
źródło
Najlepszym sposobem na zdobycie przedmiotów zamówienia jest użycie
$order->getAllVisibleItems()
Wyjaśniony przez fschmenglera powyżej,
getAllItems():
Ta funkcja zwraca tablicę wszystkich pozycji koszyka z produktem config simple.Otrzymujesz trzy produkty, ponieważ używasz
$order->getAllItems()
, musisz użyć$order->getAllVisibleItems()
metody, aby uzyskać oryginalny produkt.Możesz sprawdzić więcej referencji z pliku
vendor/magento/module-quote/Model/Quote.php
źródło
możesz użyć pętli elementu i wykluczyć element potomny za pomocą następującego kodu:
źródło