ऑर्डररीप्रोज़िटरी का उपयोग करके इंक्रीमेंट आईडी (ऑर्डर आईडी के बजाय) का उपयोग करके ऑर्डर को लोड करने के लिए नवीनतम सर्वोत्तम अभ्यास क्या होगा
ऑर्डररीप्रोज़िटरी का उपयोग करके इंक्रीमेंट आईडी (ऑर्डर आईडी के बजाय) का उपयोग करके ऑर्डर को लोड करने के लिए नवीनतम सर्वोत्तम अभ्यास क्या होगा
जवाबों:
Magento 2 वस्तुओं को पुनः प्राप्त करने और सहेजने के लिए सेवा अनुबंध का उपयोग करता है। Magento में यह परत रिपोजिटरी द्वारा बनाई गई है, जो कि प्रबंधकों get()
और save()
विधियों के साथ हैं । यह यूजर कोड को मॉडल कॉल से दूर रखता है। मॉडल विधियों (जैसे load()
या save()
या loadByIncrementId()
) को सीधे कॉल न करें , उन्हें हटा दिया जा रहा है क्योंकि कस्टम कोड को सेवा अनुबंध का उपयोग करना चाहिए। इसके अलावा, Magoa के भीतर से API का उपयोग न करें जैसे कि खोआ सुझाव दे रहा है, इसका कोई मतलब नहीं है। एपीआई Magento को अन्य प्रणालियों से जोड़ने के लिए है।
अपने कंस्ट्रक्टर में ऑर्डरRepository और SearchCriteriaBuilder को इंजेक्ट करें:
private $orderRepository;
private $searchCriteriaBuilder;
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Sales\Model\OrderRepository $orderRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
){
$this->orderRepository = $orderRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
parent::__construct($context);
}
और अपने समारोह में:
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('increment_id', '000000001', 'eq')->create();
$orderList = $this->orderRepository->getList($searchCriteria)->getItems();
// $orderList is now an array of Orders with this incrementId, which is just one order obviously
/** @var \Magento\Sales\Model\Order $order */
$order = $orderList[0];
// Your logic here
$order = $this->orderRepository->save($order);
$order = $orderList[0]
के साथ $order = $orderList->getFirstItem()
संग्रह से पहले (और केवल) आइटम प्राप्त करने के लिए।
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
लेकिन $payment
कृपया मेरी समस्या की जांच करने के लिए यहां कुछ भी नहीं प्राप्त कर रहा है यहां magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
जहां तक मुझे पता है, हमें उपयोग करना चाहिए \Magento\Sales\Api\Data\OrderInterface
।
/** @var \Magento\Sales\Api\Data\OrderInterfaceFactory $order **/
protected $orderFactory;
public function __construct(
\Magento\Sales\Api\Data\OrderInterfaceFactory $orderFactory,
......
) {
$this->orderFactory = $orderFactory;
}
इंक्रीमेंट आईडी द्वारा लोड ऑर्डर ऑब्जेक्ट:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] को सेवा अनुबंधों के साथ प्रयास करना चाहिए। जैको के जवाब की कोशिश करो।
\Magento\Sales\Api\OrderRepositoryInterface
और इसकी get()
विधि