ম্যাজেন্টো 2.1.1 অর্ডাররোপোজিটরি অবজেক্টটি ব্যবহার করে বর্ধিত আইডি দিয়ে অর্ডার লোড করবেন কীভাবে


19

অর্ডাররেপোজিটরি ব্যবহার করে ইনক্রিমেন্ট আইডি (অর্ডার আইডির পরিবর্তে) ব্যবহার করে অর্ডার লোড করার সর্বশেষতম অনুশীলনটি কী হবে


2
কোনও সদৃশ নয় - সংযুক্ত উত্তরটি অর্ডার আইডি দিয়ে অর্ডার পুনরুদ্ধারের বিষয়ে, বর্ধিত আইডি দ্বারা নয়
ফ্যাবিয়ান শেমংলার

ekk! চিহ্নটিকে নকল হিসাবে পূর্বাবস্থায় ফেলার কোনও উপায় আছে কি? আমি নীচের উত্তরটিকে সমাধানের উত্তর হিসাবে চিহ্নিত করতে চেয়েছিলাম।
frostshoxx

1
খুব দেরীতে, এখন এটি ইতিমধ্যে বন্ধ রয়েছে। তবে আমি প্রশ্নটি পুনরায় খুলতে মনোনীত করেছি।
ফ্যাবিয়ান শেমংলার

উত্তর:


32

ম্যাজেন্টো 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);

Magento.com এ অফিসিয়াল ম্যাজেন্টো পিএইচপি বিকাশকারী গাইড

গিথুবে মুলডেরিয়া দ্বারা কোড


আমি ত্রুটি পাচ্ছি এর মতো: ম্যাজেন্টো \ বিক্রয় \ মডেল \ রিসোর্সমোডেল \ অর্ডার \ অ্যারে হিসাবে অ্যারে হিসাবে $ অর্ডার = $ অর্ডারলিস্ট [0] টাইপের অবজেক্টটি ব্যবহার করতে পারি না;
আশীষ রাজ

এটা অদ্ভুত, আমি একটি অ্যারে পেয়েছি। আপনি কোন সংস্করণে আছেন? কিন্তু একটি সংগ্রহের সাথে আপনি শুধু প্রতিস্থাপন করতে পারেন $order = $orderList[0]সঙ্গে $order = $orderList->getFirstItem()সংগ্রহ থেকে প্রথম (এবং শুধুমাত্র) আইটেমটি জন্য।
জ্যাক

আমি সংস্করণ 2.1.3 এ। এবং লোড পেমেন্ট অবজেক্টের জন্য আমার অর্ডার অবজেক্টটি লোড করা দরকার .. আমি করেছি $order = $orderList->getFirstItem(); $payment = $order->getPayment();তবে কিছুই না পেয়ে $payment দয়া করে আমার সমস্যাটি এখানে চেক করুন magento.stackexchange.com/questions/158935/…
আশীষ রাজ

1
আমি গৃহীত উত্তর সঙ্গে একটি বাগ ছিল। এটি এটি সমাধান। ভাল সমাধানের জন্য ধন্যবাদ
কমপ্যাক্টকোড

ম্যাজেন্টো ২.৩.x এ আমাকে এইভাবে অর্ডারটি নেওয়া দরকার:$order = $orderList['000000001'];
ph.dev

20

আমি যতদূর জানি, আমাদের ব্যবহার করা উচিত \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');

[সম্পাদনা] পরিষেবা চুক্তি দিয়ে চেষ্টা করা উচিত। জ্যাকোর উত্তর চেষ্টা করুন।


3
দয়া করে আপনার পরিবর্তনশীল নামগুলিতে আন্ডারস্কোর ব্যবহার করবেন না। পিএইচপি 5 টি পিএইচপি 5 থেকে অ্যাক্সেস মডিফায়ার পেয়েছিল যা এখন 12 বছর পুরানো। আপনার আধুনিক প্রোগ্রামিং অনুশীলনগুলি ব্যবহার করা উচিত, বিশেষত উত্তরের জন্য এখানে।
জ্যাক

1
এই পদ্ধতিটি "কাজ করে" এমনকি ব্যবহার করা উচিত নয়। এক: ডি ইনজেকশনটি একটি ভাগ করা অবজেক্ট, যদি না এটি নির্দিষ্ট না করা হয়; আপনি যে কোনও সময় অর্ডারআইনটারফেস sertোকান আপনি ঠিক একই জিনিসটি ব্যবহার করবেন। আপনি যদি সত্যিই এই রুটে যেতে চান তবে অর্ডারআইন্টারফেসফ্যাক্টরিটি ব্যবহার করুন এবং তারপরে ক্রিয়েট () কল করুন। দ্বিতীয়ত, আপনার উচিত জ্যাকোর উত্তরের মতো পরিষেবার চুক্তিগুলি ব্যবহার করা।
আয়ান

2
সংস্করণ ২.২.২, ব্যবহার \Magento\Sales\Api\OrderRepositoryInterfaceএবং এর get()পদ্ধতি
লুস্ক্কু

2
পরিষেবা চুক্তি বিবেচনা করা উচিত।
থিয়াগো লিমা

1
@ থিয়াগোলিমা হ্যাঁ, আমি আপনার সাথে একমত হয়েছি! আমি পরিষেবাগুলির চুক্তিগুলির উত্তরকেও ভোট দিয়েছি।
খোোয়া ট্রুংদিনহ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.