Apa yang akan menjadi praktik terbaik terbaru untuk memuat Pesanan menggunakan ID kenaikan (bukan ID Pesanan) menggunakan OrderRepository
Apa yang akan menjadi praktik terbaik terbaru untuk memuat Pesanan menggunakan ID kenaikan (bukan ID Pesanan) menggunakan OrderRepository
Jawaban:
Magento 2 menggunakan Kontrak Layanan untuk mengambil dan menyimpan objek. Dalam Magento lapisan ini dibentuk oleh Repositori, yang manajer dengan get()
dan save()
metode. Ini menjaga kode pengguna dari Panggilan model. Jangan panggil metode model (seperti load()
atau save()
atau loadByIncrementId()
) secara langsung, mereka sudah ditinggalkan karena kode kustom harus menggunakan Kontrak Layanan. Juga, jangan gunakan API dari dalam Magento seperti yang disarankan Khoa, itu tidak masuk akal. API adalah untuk menghubungkan Magento dengan sistem lain.
Suntikkan OrderRepository dan SearchCriteriaBuilder di konstruktor Anda:
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);
}
Dan dalam fungsi Anda:
$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]
dengan $order = $orderList->getFirstItem()
untuk mendapatkan item pertama (dan hanya) dari koleksi.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Tapi tidak mendapatkan apa-apa di $payment
Silakan periksa masalah saya di sini magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
Sejauh yang saya tahu, kita harus menggunakan \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;
}
Muat objek pesanan dengan penambahan id:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] harus mencoba dengan kontrak layanan. Coba jawaban Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
dan get()
metodenya