Какова будет последняя рекомендация по загрузке заказа с использованием идентификатора приращения (вместо идентификатора заказа) с использованием OrderRepository
Какова будет последняя рекомендация по загрузке заказа с использованием идентификатора приращения (вместо идентификатора заказа) с использованием OrderRepository
Ответы:
Magento 2 использует контракты на обслуживание для извлечения и сохранения объектов. В Magento этот слой образован репозиториями, которые являются менеджерами get()
и save()
методами. Это удерживает код пользователя от вызовов модели. Не вызывайте методы модели (например, load()
или save()
или loadByIncrementId()
) напрямую, они устарели, поскольку пользовательский код должен использовать контракты на обслуживание. Кроме того, не используйте API из Magento, как предлагает Khoa, это не имеет смысла. API предназначен для подключения Magento к другим системам.
Вставьте OrderRepository и SearchCriteriaBuilder в свой конструктор:
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;
}
Загрузить объект заказа по инкременту ID:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[РЕДАКТИРОВАТЬ] следует попробовать с контрактами на обслуживание. Попробуйте ответ Жако.
\Magento\Sales\Api\OrderRepositoryInterface
и ее get()
метод