$ Status-> save()を呼び出さなくても、StatusHistoryCommentを注文することができますか?


7

$ order-> save()イベントをディスパッチしたくないので、これが必要です。私は何かしたいです$order->_getResource()->saveAttribute($order, 'statusHistoryComment');

私はどんな考えでも喜んでいます:)

UPD:saveAttributeEAVモデルのみで作業しているようです。フラットはどうですか?

回答:


5

注文がすでにシステムに存在する場合は、コアの動作を模倣save()して、注文ステータス履歴コレクションまたはステータス履歴モデル自体を呼び出すことができます。

// just some random order object
$order = Mage::getModel('sales/order')->load(2);

$message = 'Add status history comment!';

/** @var Mage_Sales_Model_Order_Status_History $history */
$history = Mage::getModel('sales/order_status_history')
    ->setOrder($order)
    ->setStatus($order->getStatus())
    ->setComment($message)
    ->setData('entity_name', Mage_Sales_Model_Order::HISTORY_ENTITY_NAME);

// EITHER model save
$history->save();

// OR collection save
$historyCollection = $order->getStatusHistoryCollection();
$historyCollection->addItem($history);
$historyCollection->save();

プログラムで追加された注文ステータス履歴コメント

注文のsave()メソッドは呼び出されないため、イベントは送出されません。


1

いいえ。save注文オブジェクトをデータベースに保持するには、注文オブジェクトを呼び出す必要があります。

これは、注文ステータス履歴タイプが他のステータス履歴タイプから抽象化されており、注文モデルがを呼び出すと、ステータス履歴コレクションから保存するステータス履歴への変更を検索するためですsave

Magento 1.xソースを読んで、コアでこれをどのように使用するかを確認します。この直後に、への呼び出しが続きsaveます。

お役に立てば幸いです。


ありがとう、考えるべきことがある。醜いcore_writeを使い続けることを余儀なくされている。
spiil

フィル、あなたは本当にこの答えを更新/削除することを検討すべきです、それは誤解を招くものです。magentoの複合オブジェクトと同様に、メインオブジェクトの保存呼び出しは必ずしも必要ではありません。彼らがコアコードでこのように行うという事実は、mam08ixoが上で指摘したように、それが異なる方法で実行できないことを意味するものではありません。履歴モデルまたはコレクションを保存でき、それは問題なく機能します。実際、私はそれがこの方法の方がより良いと思います-私は常にそれを本当に必要としないもののためにorder-> save()を呼び出すことを嫌いました。
クリスティ2017年

@Cristi私は間違っていたり、事実上不正確だったりすることはありません。より良い答えは、より多くの賛成に値します。フィードバックに感謝します。
philwinkle 2017年

0

はい:ロジックでsales_convert_quote_to_orderイベントを聞くことができる場合。

Mage / SalesRule / Model / Observer.phpaddSalesRuleNameToOrder定義された例

    $order->setCouponRuleName($ruleModel->getName());

    return $this;

呼び出しなし $order->save();

これをカスタムモジュールで正常に使用しました。私のオブザーバーメソッドは次のとおりです。

public function addCustomCommentToOrder(Varien_Event_Observer $observer)
{
    # conveniently, Mage/Sales/Model/Convert/Quote.php gives us both the order and the quote
    $order = $observer->getEvent()->getOrder();

    # ...
    $custom_comment = 'some useful comment'; 

    $order->addStatusHistoryComment($custom_comment)
        ->setIsVisibleOnFront(True) # change this to hide it from frontend
        ->setIsCustomerNotified(False) # change this to email the customer or not
    ;
    # no call to $order->save(); !
}

それが役立つことを願っています;-)

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