Mein Ziel ist es, eine Bestellung an unser Backend-System zu senden, wenn eine Bestellung in unserer Magento 2-Instanz aufgegeben wird.
Der Code zum Senden des Bestellobjekts funktioniert. Meine Frage ist , was der optimale Ansatz ist abzurufen item
Daten (zB price
, subtotal
, total
, sku
, etc.).
Ich verwende Folgendes, um die Bestellung und die Artikel abzurufen.
$orderId = $this->_order->load($order);
$billing = $orderId->getBillingAddress();
$items = $orderId->getAllItems();
foreach ($items as $item) {
$itemPrice = $item->getPrice();
$itemSku = $item->getSku();
}
Ist das Durchlaufen $items
, um Preis, SKU usw. zu erhalten, der beste Weg oder gibt es ein Magento2, das collection/method
ich verwenden sollte?
Vielen Dank
print_r(orderId->getAllItems())
alle Elemente aus?Antworten:
Sie haben es mit objectManager gemacht
quelle
Die richtige Methode zum Laden des Bestellobjekts (das die Artikelinformationen in sich trägt) erfolgt über Repository-Objekte.
Fügen Sie das Auftragsrepository in Ihren Konstruktor ein
und in der erforderlichen Methode verwenden als:
Weitere Informationen zu Repository-Objekten: http://alanstorm.com/magento_2_understanding_object_repositories
quelle
$order->getAllVisibleItems()
getAllVisibleItems()
vsgetAllItems()
unten i Code, der Ihnen hilft, Bestellartikel zu erhalten (ich habe in Block-Klasse aufgerufen)
Wenn es funktioniert, akzeptiere die Antwort, die anderen hilft
quelle
load(1)
. Aber ich konnte die Bestellinformationen zum Laden mit bekommenloadByIncrementId($orderId)
.Wenn du benutzt
Anstatt
Sie erhalten bessere Ergebnisse
Weitere Erläuterungen:
Wenn Sie sich die Tabelle sales_order_item ansehen, werden Sie feststellen, dass es für jeden Artikel in der Bestellung zwei Zeilen gibt, eine mit nutzlosen Daten und die andere mit den Daten, die Sie wahrscheinlich benötigen würden. Wenn Sie getAllItems () verwenden, erhalten Sie diese beiden Zeilen, aber wenn Sie getAllVisibleItems () verwenden, erhalten Sie nur die Zeilen mit den nützlichen Daten. Ich hoffe das hilft dir!
quelle