Какова будет последняя рекомендация по загрузке заказа с использованием идентификатора приращения (вместо идентификатора заказа) с использованием 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()метод