オブザーバー内でLast OrderIdを取得する方法


7

請求書と出荷を自動的に作成できるように注文の最後の注文IDを取得しようとしていますが、アクションを実行するための正しいorderIdをロードできないようです...

これがorderId Observer.phpをロードしようとする方法です

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

orderIdが存在しない場合は例外をスローします

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

問題は、静的なorderIdを渡しても例外がスローされないことです。

$orderIncrementId = '1100000023-4';

しかし、モデルを介してロードしようとすると、できません

誰かが注文のorderIdを取得する方法を教えてもらえますか?


オブザーバーはどのイベントを使用していますか?
Vladimir Kerkhoff、2014

私が使用しています@VladimirKerkhoff sales_order_invoice_registerオブザーバーのために
user1704524

回答:


1

受け入れられた答えは私にとってはうまくいきませんでした。それを掘り下げると、次の解決策が私にとってうまくいきました:

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

13

次のように、セッションから最新のorder_idを取得します。

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

これを行う別の 方法もここにあります。


4

Magentoで最後の注文IDを取得するには:

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

2
これは正しいですが、問題があります。getFirstItemコレクション全体をロードします。注文が多い場合、これは問題になる可能性があります。1つのアイテムのみが読み込まれるようにするには、コレクションに制限1を追加する必要があります。
マリウス

確認しました。getFirstItemはすべての注文情報を表示しません。注文情報は1つしか表示されません。
saravanavelu 2014

おかげで@Marius私が使用して終了しましたMage::getSingleton('checkout/session')->getLastRealOrderId();が、私はAdminで作成された注文の違いがあることが意識のだ
user1704524は

1
他のすべての注文情報が表示されるわけではありません。私はそれがデータベースからそれらを取得するだけであり、この場合それらは役に立たないと言っています。動作を確認しますVarien_Data_Collection::getFirstItem。10万件の注文がある場合、この方法で最後の注文番号を取得するには、時間がかかります。
マリウス

はい、そうです。
saravanavelu 2014
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.