Quale sarebbe la migliore procedura più recente per caricare l'ordine utilizzando l'ID incremento (anziché l'ID ordine) utilizzando OrderRepository
Quale sarebbe la migliore procedura più recente per caricare l'ordine utilizzando l'ID incremento (anziché l'ID ordine) utilizzando OrderRepository
Risposte:
Magento 2 utilizza i Contratti di servizio per recuperare e salvare oggetti. In Magento questo livello è formato da Repository, che sono gestori con get()
e save()
metodi. Ciò mantiene il codice utente lontano dalle chiamate del modello. Non chiamare direttamente i metodi del modello (come load()
o save()
o loadByIncrementId()
), sono deprecati poiché il codice personalizzato dovrebbe utilizzare i Contratti di servizio. Inoltre, non usare l'API all'interno di Magento come suggerisce Khoa, non ha senso. L'API serve per connettere Magento con altri sistemi.
Iniettare OrderRepository e SearchCriteriaBuilder nel costruttore:
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 nella tua funzione:
$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]
con $order = $orderList->getFirstItem()
per ottenere il primo (e unico) oggetto dalla raccolta.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Ma non riesco a entrare Non $payment
controllare il mio problema qui magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
Per quanto ne so, dovremmo usare \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;
}
Carica oggetto ordine per ID incremento:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] dovrebbe provare con contratti di servizio. Prova la risposta di Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
e il suo get()
metodo