অর্ডাররেপোজিটরি ব্যবহার করে ইনক্রিমেন্ট আইডি (অর্ডার আইডির পরিবর্তে) ব্যবহার করে অর্ডার লোড করার সর্বশেষতম অনুশীলনটি কী হবে
অর্ডাররেপোজিটরি ব্যবহার করে ইনক্রিমেন্ট আইডি (অর্ডার আইডির পরিবর্তে) ব্যবহার করে অর্ডার লোড করার সর্বশেষতম অনুশীলনটি কী হবে
উত্তর:
ম্যাজেন্টো 2 পদার্থ পুনরুদ্ধার এবং সংরক্ষণের জন্য পরিষেবা চুক্তি ব্যবহার করে। ম্যাজেন্টোতে এই স্তরটি রিপোজিটরিগুলি দ্বারা গঠিত হয় যা ম্যানেজার get()
এবং save()
পদ্ধতিগুলির সাথে থাকে। এটি ব্যবহারকারীর কোডকে মডেল কলগুলি থেকে দূরে রাখে। মডেল পদ্ধতি (যেমন কল করবেন না load()
বা save()
বা loadByIncrementId()
) সরাসরি, তারা অবচিত করা হচ্ছে যেমন কাস্টম কোড পরিষেবা চুক্তি ব্যবহার করা উচিত। এছাড়াও, খোয়া যেমন পরামর্শ দিচ্ছে তেমন ম্যাজেন্টোর মধ্যে থেকে এপিআইটি ব্যবহার করবেন না, এটি কোনও অর্থবোধ করে না। এপিআই হ'ল ম্যাজেন্টোকে অন্যান্য সিস্টেমের সাথে সংযুক্ত করার জন্য।
আপনার কন্সট্রাক্টরে অর্ডাররেপসোটিরি এবং সার্চক্রিটরিয়া বিল্ডার ইনজেকশন করুন:
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');
[সম্পাদনা] পরিষেবা চুক্তি দিয়ে চেষ্টা করা উচিত। জ্যাকোর উত্তর চেষ্টা করুন।
\Magento\Sales\Api\OrderRepositoryInterface
এবং এর get()
পদ্ধতি