Điều gì sẽ là cách thực hành tốt nhất mới nhất để tải Đơn hàng bằng cách sử dụng ID gia tăng (thay vì ID đơn hàng) bằng OrderRep repository
Điều gì sẽ là cách thực hành tốt nhất mới nhất để tải Đơn hàng bằng cách sử dụng ID gia tăng (thay vì ID đơn hàng) bằng OrderRep repository
Câu trả lời:
Magento 2 sử dụng Hợp đồng dịch vụ để truy xuất và lưu các đối tượng. Trong Magento, lớp này được hình thành bởi Kho lưu trữ, là các trình quản lý get()
và save()
phương thức. Điều này giữ cho mã người dùng tránh xa các cuộc gọi Model. Đừng gọi các phương thức mô hình (như load()
hoặc save()
hoặc loadByIncrementId()
) trực tiếp, chúng không được dùng nữa vì mã tùy chỉnh nên sử dụng Hợp đồng dịch vụ. Ngoài ra, đừng sử dụng API từ bên trong Magento như Khoa đang đề xuất, nó không có ý nghĩa gì. API dùng để kết nối Magento với các hệ thống khác.
Tiêm OrderRep repository và SearchCriteriaBuilder trong hàm tạo của bạn:
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);
}
Và trong chức năng của bạn:
$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);
Hướng dẫn dành cho nhà phát triển PHP Magento chính thức trên magento.com
$order = $orderList[0]
bằng $order = $orderList->getFirstItem()
để có được mục đầu tiên (và duy nhất) từ bộ sưu tập.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Nhưng nhận được gì trong $payment
Vui lòng kiểm tra vấn đề của tôi ở đây magento.stackexchange.com/questions/158935/...
$order = $orderList['000000001'];
Theo tôi biết, chúng ta nên sử dụng \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;
}
Tải đối tượng thứ tự theo id tăng:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] nên thử với các hợp đồng dịch vụ. Hãy thử câu trả lời của Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
và get()
phương thức của nó