【问题标题】:Magento 2 $quote->getAllItems(); does not working properlyMagento 2 $quote->getAllItems();不能正常工作
【发布时间】:2022-01-24 16:42:25
【问题描述】:

尝试在售后过程中获取报价项目,它工作正常。但是当报价不在默认网站时,请求为空。为什么?谢谢! 这是代码:

  $orderId = 123;
  $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
  $quoteToOrder = $objectManager->create('Magento\Quote\Model\Quote\Item\ToOrderItem');
  $order = $objectManager->create('Magento\Sales\Model\Order')->load($orderId);
  $quote = $objectManager->create('\Magento\Quote\Model\Quote')->load($order->getQuoteId());

  $items = $quote->getAllItems();

  foreach ($items as $quoteItem) ...

它不是结帐或购物车的扩展,它是一个售后流程,在订单通过 cron 发货之前开始。

【问题讨论】:

    标签: object magento magento2 programmatically


    【解决方案1】:

    从 Magento-2.0 开始,Magento_Checkout 和 Magento_Quote 中的服务契约还没有提供必要的方法,所以我们使用购物车模型。在你的插件中像这样注入它:

    public function __construct(\Magento\Checkout\Model\Cart $cart)
    {
        $this->cart = $cart;
    }
    

    现在您可以访问购物车,您可以通过多种方式检索商品,这与 Magento 1 中的基本相同:

    $this->cart->getQuote()->getItemsCollection()

    返回一个报价项目集合,其中包含与当前报价相关的所有项目。

    $this->cart->getItems()

    这是上面方法的一个快捷方式,但是如果没有引号它返回一个空数组,所以你不能依赖获取一个集合实例。

    $this->cart->getQuote()->getAllItems()

    加载项目集合,然后返回一个包含所有未标记为已删除(即已在当前请求中删除)的项目的数组。

    $this->cart->getQuote()->getAllVisibleItems()

    加载项目集合,然后返回未标记为已删除且没有父项的所有项目的数组(即,您获得捆绑和可配置产品的项目,但没有关联的子项)。每个数组项对应购物车页面上显示的一行。

    选择最适合您的需求。在大多数情况下,最后一种方法就是您所需要的。

    【讨论】:

    • 感谢您的回答。但是使用此解决方案,只能从当前会话中捕获项目。但在这种情况下,这是一个售后流程,我不需要当前会​​话的项目,我需要来自特定 orderID 的项目。还是我错了?那么如何扩展它来实现我的目标呢?
    猜你喜欢
    • 2015-06-18
    • 1970-01-01
    • 1970-01-01
    • 2016-12-18
    • 2013-03-30
    • 2010-11-30
    • 2021-10-02
    • 2017-08-06
    • 2013-11-22
    相关资源
    最近更新 更多