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?

user1704524
quelle
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()
Stefan
quelle
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.

mbalparda
quelle
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()
saravanavelu
quelle
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