Qual seria a melhor prática mais recente para carregar o pedido usando o ID de incremento (em vez do ID do pedido) usando o OrderRepository
Qual seria a melhor prática mais recente para carregar o pedido usando o ID de incremento (em vez do ID do pedido) usando o OrderRepository
Respostas:
O Magento 2 usa contratos de serviço para recuperar e salvar objetos. No Magento, essa camada é formada por Repositórios, que são gerentes get()
e save()
métodos. Isso mantém o código do usuário longe das chamadas de modelo. Não chame métodos de modelo (como load()
ou save()
ou loadByIncrementId()
) diretamente, pois eles estão sendo preteridos, pois o código personalizado deve usar os Contratos de Serviço. Além disso, não use a API do Magento, como sugere o Khoa, isso não faz sentido. A API é para conectar o Magento a outros sistemas.
Injete OrderRepository e SearchCriteriaBuilder em seu construtor:
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);
}
E na sua função:
$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]
por $order = $orderList->getFirstItem()
para obter o primeiro (e único) item da coleção.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Mas conseguir nada em $payment
favor verificar o meu problema aqui magento.stackexchange.com/questions/158935/...
$order = $orderList['000000001'];
Tanto quanto eu sei, devemos usar \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;
}
Carregar objeto de pedido por ID de incremento:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] deve tentar contratos de serviço. Tente a resposta de Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
e seu get()
método