สิ่งที่จะเป็นวิธีที่ดีที่สุดล่าสุดในการสั่งซื้อที่เพิ่มขึ้นในการโหลดโดยใช้ ID (แทนรหัสคำสั่งซื้อ) โดยใช้OrderRepository
สิ่งที่จะเป็นวิธีที่ดีที่สุดล่าสุดในการสั่งซื้อที่เพิ่มขึ้นในการโหลดโดยใช้ ID (แทนรหัสคำสั่งซื้อ) โดยใช้OrderRepository
คำตอบ:
Magento 2 ใช้สัญญาบริการสำหรับการดึงและบันทึกวัตถุ ใน Magento เลเยอร์นี้ถูกสร้างขึ้นโดยที่เก็บซึ่งเป็นผู้จัดการด้วยget()และsave()วิธีการ สิ่งนี้จะทำให้รหัสผู้ใช้อยู่ห่างจากการโทรแบบ อย่าเรียกวิธีการโมเดล (เช่นload()หรือsave()หรือloadByIncrementId()) โดยตรงพวกเขากำลังถูกคัดค้านเนื่องจากรหัสที่กำหนดเองควรใช้สัญญาบริการ นอกจากนี้อย่าใช้ API จากภายในวีโอไอพีอย่างที่ Khoa แนะนำ แต่ก็ไม่สมเหตุสมผล API สำหรับเชื่อมต่อ Magento กับระบบอื่น ๆ
Inject OrderRepository และ SearchCriteriaBuilder ใน Constructor ของคุณ:
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 PHP อย่างเป็นทางการที่ magento.com
$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');
[แก้ไข]ควรลองทำสัญญาบริการ ลองคำตอบของ Jacco
\Magento\Sales\Api\OrderRepositoryInterfaceและget()วิธีการ