So erhalten Sie die Last OrderId in einem Observer


7

Ich versuche, die letzte Bestell-ID für eine Bestellung abzurufen, damit ich automatisch eine Rechnung und einen Versand erstellen kann, aber ich kann anscheinend nicht die richtige Bestell-ID laden, um die Aktion auszuführen ...

Hier ist, wie ich versuche, die orderId Observer.php zu laden

$order = Mage::getModel('sales/order')->load($orderid);
$orderIncrementId = $order->getIncrementId();

Wenn die orderId nicht vorhanden ist, wird eine Ausnahme ausgelöst

$order = Mage::getModel('sales/order')
            ->loadByIncrementId($orderIncrementId);    
if (!$order->getId()) {
        Mage::throwException("Order does not exist, for the Shipment process to complete");
    }

Das Problem ist, wenn ich eine statische Reihenfolge übergebe, wird keine Ausnahme ausgelöst

$orderIncrementId = '1100000023-4';

Aber wenn ich versuche, es über das Modell zu laden, kann ich es nicht

Kann mir jemand zeigen, wie man die Bestell-ID für eine Bestellung erhält?


Welches Ereignis verwenden Sie für den Beobachter?
Vladimir Kerkhoff

@VladimirKerkhoff Ich benutze sales_order_invoice_registerfür den Observer
user1704524

Antworten:


1

Die akzeptierte Antwort hat bei mir nicht funktioniert. Es stellte sich heraus, dass folgende Lösung für mich funktioniert:

Mage::getModel("sales/order")->getCollection()->getLastItem()->getIncrementId()

13

Holen Sie sich die neueste order_id aus der Sitzung wie folgt:

Mage::getSingleton('checkout/session')->getLastOrderId();

Hier ist auch eine andere Möglichkeit, dies zu tun.


4

So erhalten Sie die letzte Bestellnummer in Magento:

   $orders = Mage::getModel('sales/order')->getCollection()
       ->setOrder('increment_id','DESC')
       ->setPageSize(1)
       ->getFirstItem();
    echo $orders->getEntityId()

2
Dies ist richtig, aber es gibt ein Problem. getFirstItemlädt die gesamte Sammlung. Dies kann ein Problem sein, wenn Sie viele Bestellungen haben. Sie sollten der Sammlung ein Limit von 1 hinzufügen, um sicherzustellen, dass nur ein Element geladen wird.
Marius

Ich habe nachgeschaut. getFirstItem zeigt nicht alle Bestellinformationen an. Es werden nur eine Bestellinformation angezeigt.
Saravanavelu

Vielen Dank an @Marius, den ich letztendlich verwendet habe, Mage::getSingleton('checkout/session')->getLastRealOrderId();aber ich bin mir sicher, dass es einen Unterschied für Bestellungen gibt, die in Admin erstellt wurden
user1704524

1
Ich sage nicht, dass alle anderen Bestellinformationen angezeigt werden. Ich sage, dass es sie nur aus der Datenbank abruft und sie in diesem Fall nutzlos sind. Überprüfen Sie, wie es Varien_Data_Collection::getFirstItemfunktioniert. Wenn Sie 100.000 Bestellungen haben, dauert es ewig, bis Sie die letzte Bestellnummer auf diese Weise abgerufen haben.
Marius

OK, das stimmt.
Saravanavelu
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.