Jaka jest najnowsza najlepsza praktyka ładowania zamówienia przy użyciu identyfikatora przyrostu (zamiast identyfikatora zamówienia) przy użyciu OrderRepository
Jaka jest najnowsza najlepsza praktyka ładowania zamówienia przy użyciu identyfikatora przyrostu (zamiast identyfikatora zamówienia) przy użyciu OrderRepository
Odpowiedzi:
Magento 2 wykorzystuje umowy serwisowe do wyszukiwania i zapisywania obiektów. W Magento warstwa ta jest tworzona przez Repozytoria, które są menedżerami get()
i save()
metodami. To utrzymuje kod użytkownika z dala od wywołań modeli. Nie należy wywoływać metod modelowych (takich jak load()
lub save()
lub loadByIncrementId()
) bezpośrednio, ponieważ są one przestarzałe, ponieważ niestandardowy kod powinien wykorzystywać umowy serwisowe. Nie używaj również API z Magento, jak sugeruje Khoa, to nie ma sensu. Interfejs API służy do łączenia Magento z innymi systemami.
Wstrzykiwanie OrderRepository i SearchCriteriaBuilder w swoim konstruktorze:
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);
}
I w twojej funkcji:
$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]
ją, $order = $orderList->getFirstItem()
aby uzyskać pierwszy (i jedyny) przedmiot z kolekcji.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Ale nic nie dostałem $payment
Proszę sprawdzić mój problem tutaj magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
O ile mi wiadomo, powinniśmy użyć \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;
}
Załaduj obiekt zamówienia według identyfikatora przyrostu:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDYCJA] powinna spróbować z kontraktami serwisowymi. Spróbuj odpowiedzi Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
i jego get()
metoda