Was wäre die neueste bewährte Methode , um eine Bestellung mithilfe der Inkrement-ID (anstelle der Bestell- ID) mithilfe von OrderRepository zu laden ?
Was wäre die neueste bewährte Methode , um eine Bestellung mithilfe der Inkrement-ID (anstelle der Bestell- ID) mithilfe von OrderRepository zu laden ?
Antworten:
Magento 2 verwendet Serviceverträge zum Abrufen und Speichern von Objekten. In Magento wird diese Ebene von Repositories gebildet, die Manager mit get()
und save()
Methoden sind. Dadurch wird der Benutzercode von Model-Aufrufen ferngehalten. Rufen Sie Modellmethoden (wie load()
oder save()
oder loadByIncrementId()
) nicht direkt auf, sie werden veraltet, da benutzerdefinierter Code die Serviceverträge verwenden sollte. Verwenden Sie die API auch nicht in Magento, wie Khoa vorschlägt, da dies keinen Sinn ergibt. Die API dient zur Verbindung von Magento mit anderen Systemen.
Injizieren Sie OrderRepository und SearchCriteriaBuilder in Ihren Konstruktor:
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);
}
Und in Ihrer Funktion:
$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]
mit $order = $orderList->getFirstItem()
den ersten zu bekommen (und nur) Artikeln aus der Sammlung.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
aber immer nichts $payment
Überprüfen Sie bitte mein Problem hier magento.stackexchange.com/questions/158935/...
$order = $orderList['000000001'];
Soweit ich weiß, sollten wir verwenden \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;
}
Auftragsobjekt nach Inkrement-ID laden:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] sollte es mit Serviceverträgen versuchen. Versuchen Sie Jaccos Antwort.
\Magento\Sales\Api\OrderRepositoryInterface
und get()
Methode