Я работаю над расширением платежа M2. Нашему торговцу нужно, чтобы мы отправили детали товара вместе с заказом.
Все работает нормально, но $order->getAllItems();
или $order->getAllVisibleItems();
возвращает простые и настраиваемые родительские продукты так
если у меня есть 2 продукта в корзине
- 1 простой продукт
- 1 Связанный с настраиваемым продуктом
поэтому вместо двух продуктов я получаю три; один простой, связанный продукт и его родительский продукт;
Я могу попытаться извлечь правильные продукты, но я уверен, что это должен быть какой-то другой
/** @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
источник
Лучший способ получить элементы заказа - использовать
$order->getAllVisibleItems()
Объясненный выше fschmengler,
getAllItems():
Эта функция возвращает массив всех товаров в корзине с простым конфигурационным продуктом.Вы получаете три продукта, потому что вы используете,
$order->getAllItems()
вы должны использовать$order->getAllVisibleItems()
метод, чтобы получить оригинальный продукт.Вы можете проверить больше ссылок из файла
vendor/magento/module-quote/Model/Quote.php
источник
Вы можете использовать цикл Item и исключить дочерний элемент следующим кодом:
источник