অর্ডার আইটেমগুলি পাওয়ার জন্য ম্যাজেন্টো 2 সঠিক উপায়


11

আমি এম 2 পেমেন্ট এক্সটেনশনে কাজ করছি যা আমাদের বণিকের প্রয়োজন যাতে অর্ডার সহ আইটেমের বিশদ পাঠানো দরকার

সবকিছু ঠিকঠাক কাজ করে তবে $order->getAllItems();বা $order->getAllVisibleItems();সাধারণ এবং কনফিগারযোগ্য পিতা-মাতার পণ্যগুলিতে ফিরে আসে

কার্টে আমার যদি 2 টি পণ্য থাকে

  • 1 সাধারণ পণ্য
  • 1 কনফিগারযোগ্য পণ্য সম্পর্কিত

সুতরাং দুটি পণ্য পাওয়ার পরিবর্তে আমি তিনটি পাচ্ছি; একটি সাধারণ, সম্পর্কিত পণ্য এবং এর মূল পণ্য;

আমি সঠিক পণ্যগুলি বের করার চেষ্টা করতে পারি তবে আমি নিশ্চিত যে এটি অবশ্যই অন্য কোনও be

    /** @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 

উত্তর:


13

অর্ডার কাজ থেকে আইটেমগুলি পাওয়ার বিভিন্ন পদ্ধতি এইভাবে:

  • getItems(): লোড হওয়া অর্ডার আইটেম সংগ্রহ থেকে আইটেমির অ্যারে প্রদান করে
  • getAllItems(): মুছে ফেলা হিসাবে চিহ্নিত নয় এমন সমস্ত আইটেমের অ্যারে প্রদান করে
  • getAllVisibleItems(): মুছে ফেলা হিসাবে চিহ্নিত না হওয়া এবং মাতৃ আইটেম না থাকা সমস্ত আইটেমের অ্যারে প্রদান করে

সুতরাং শুধুমাত্র কনফিগারযোগ্য পণ্য এবং এটি সম্পর্কিত পণ্য নয়, getAllVisibleItems()সঠিক পদ্ধতিটি হ'ল:

  • একক সাধারণ আইটেমটির পিতামাতার => দৃশ্যমান নেই
  • কনফিগার আইটেমটি একটি পিতা বা মাতা নেই => প্রোফাইল
  • সম্পর্কিত সাধারণ আইটেমটির একটি প্যারেন্ট => দৃশ্যমান নয়

মনে রাখবেন যে দুর্ভাগ্যক্রমে, হিসাবে শুধুমাত্র getItems()পরিষেবা চুক্তির অংশMagento\Sales\Api\Data\OrderInterface


ধন্যবাদ মানুষ কিন্তু getAllVisibleitems () সহজ এবং কনফিগ পণ্য ফেরার একসঙ্গে তাই তার ইন্দ্রিয় আমি তৈরি না নীচের চিত্রগুলি সাহায্য করতে পারেন যদি imgur.com/8ADtnUQ imgur.com/LnMMuOM
সাজিদ Unar

চিত্রটি সঠিক দেখাচ্ছে। নাকি এটি যা আপনি চান, যা আপনার তা নয়?
ফ্যাবিয়ান শেমংলার

এটিতে কার্ট থেকে আইটেমগুলি ফিরিয়ে নেওয়া উচিত যাতে কনফিগার থেকে দুটি সাধারণ পণ্য থাকে এবং অন্যটি যেমন হয়; আমি এই যুক্তিটি যদি ($ productItem-> getPr ProdctType () == "সরল" && ($ productItem-> getParentItem ())) চালিয়ে যান তবে তা করেছিলাম; config যেহেতু কনফিগারেশনের সাধারণ পণ্যটি দাম ফেরত আসেনি
সাজিদ

1
ম্যাজেন্টো 1 এবং ম্যাজেন্টো 2-তে getAllVisibleItems বাস্তবায়নের মধ্যে একটি বিশাল পার্থক্য রয়েছে যদিও M1 শিশুদের পণ্যগুলিতে (কনফিগারযোগ্য, বান্ডিল ইত্যাদি) প্রদর্শিত হয় না, এম 2 এ তারা হয়। বাস্তবায়ন একই হলেও, children আইটেম-> getParentItemId () শিশুদের আইটেমগুলির জন্য এম 2 টি বাতিল করবে। এটি কোনও বাগ থাকুক বা না থাকুক না কেন, ব্যবহারটি আপনি ব্যবহার করছেন ম্যাগান্টো সংস্করণ অনুসারে তার আচরণের পরিবর্তিত হয়।
রিকার্ডো মার্টিনস

3

অর্ডার আইটেমগুলি পাওয়ার সর্বোত্তম উপায় ব্যবহার করা হয় $order->getAllVisibleItems()

উপরে fschmengler দ্বারা ব্যাখ্যা,

getAllItems(): এই ফাংশনটি কার্টের সমস্ত আইটেমের অ্যারেও কনফিগার করে সহজ পণ্য দিয়ে returns

আপনি তিনটি পণ্য পেয়ে যাচ্ছেন কারণ আপনার কাছে আসল পণ্য পেতে আপনাকে পদ্ধতি $order->getAllItems() ব্যবহার $order->getAllVisibleItems()করতে হবে।

আপনি ফাইল থেকে আরও রেফারেন্স চেক করতে পারেন vendor/magento/module-quote/Model/Quote.php

/**
     * Retrieve quote items array
     *
     * @return array
     */
    public function getAllItems()
    {
        $items = [];
        foreach ($this->getItemsCollection() as $item) {
            /** @var \Magento\Quote\Model\ResourceModel\Quote\Item $item */
            if (!$item->isDeleted()) {
                $items[] = $item;
            }
        }
        return $items;
    }

    /**
     * Get array of all items what can be display directly
     *
     * @return \Magento\Quote\Model\Quote\Item[]
     */
    public function getAllVisibleItems()
    {
        $items = [];
        foreach ($this->getItemsCollection() as $item) {
            //echo $item->getId()."<br>";
            if (!$item->isDeleted() && !$item->getParentItemId()) {
                $items[] = $item;
            }
        }
        return $items;
    }

উত্তরের জন্য ধন্যবাদ তবে আমি যেমনটি এটি প্রত্যাশিত হিসাবে কাজ করছে না তার বর্ণনা হিসাবে চিত্রের চিত্র কার্ট দেখুন imgur.com/8ADtnUQ এবং ডিবাগিং চিত্র imgur.com/LnMMuOM
সাজিদ

0

আপনি আইটেম লুপ ব্যবহার করতে পারেন এবং নিম্নলিখিত কোড দ্বারা শিশু আইটেম বাদ দিতে পারেন:

/** @var \Magento\Sales\Model\Order $order */
$order = $payment->getOrder();

foreach ($order->getAllItems as $_item) {
     if(!$_item->getData('has_children')) { 
        continue; 
     } else {
        $productIds[]=$_item->getProductId();
     } 
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.