回答:
あなたは次のようにそれを行うことができます
名前空間の下で宣言する
use Magento\Sales\Model\Order;
$orderId = 1;
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$order = $objectManager->create('\Magento\Sales\Model\Order') ->load($orderId);
$orderState = Order::STATE_PROCESSING;
$order->setState($orderState)->setStatus(Order::STATE_PROCESSING);
$order->save();
お役に立てれば
注文状態の更新
注文のステータスとステータスをプログラムで順番に更新するには、ステータスとステータスをこの形式で定義します。構成関数で注文オブジェクトを開始し、カスタム関数でその注文オブジェクトを使用して更新します。モデルでプログラムによって注文状態を更新するには、関数constructから注文オブジェクトを取得します。
public function __construct(
\Magento\Sales\Model\Order $order
){
$this->order = $order;
}
public function updateorder(){
$order = $this->order;
$order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true);
$order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING);
$order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference');
$order->save();
}
新しい注文メール
$orderid = '10000000';
$order = $this->_objectManager->get('Magento\Sales\Model\Order')->loadByIncrementId($orderid);
$this->_objectManager->get('Magento\Sales\Model\Order\Email\Sender\OrderSender')->send($order);
以来負荷()と保存()現在は非推奨されている(なぜなら:)
* @deprecated 100.1.0 because entities must not be responsible for their own loading.
* Service contracts should persist entities. Use resource model "load" or collections to implement
* service contract model loading operations.
OrderRepositoryInterfaceを使用して注文を読み込み、保存しました。
use Magento\Sales\Api\OrderRepositoryInterface;
public function __construct(
OrderRepositoryInterface $orderRepository,
...
) {
$this->orderRepository = $orderRepository;
}
...
$order = $this->orderRepository->get($orderId);
$order->setState(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);
$order->setStatus(\Magento\Sales\Model\Order::STATE_PAYMENT_REVIEW);
try {
$this->orderRepository->save($order);
} catch (\Exception $e) {
$this->logger->error($e);
$this->messageManager->addExceptionMessage($e, $e->getMessage());
}
それが役に立てば幸い
Magento 2.2.2これは以下の方法でのみ機能します!
$order = $this->order->loadByIncrementId('000000001');
//$order = $this->order;
$order->setState(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
$order->setStatus(\Magento\Sales\Model\Order::STATE_PROCESSING, true)->save();
$order->addStatusToHistory($order->getStatus(), 'Order processed successfully with reference again and again');
//$order->save();
しかし、私が持っている唯一の問題は、それが完全にステータスを更新しないことです:
また、新しい請求書、配送、クレジットメモを作成することもできません。ありがとう
@medmekと@ prince-patelの回答に感謝します。カスタムオーダーステータスに関する@ jafar-pinjarからの質問として、setStateおよびsetStatus呼び出しはステータスコードを取得できます。たとえば、カスタムステータスコード「有料」が作成されます。ステータス/状態を注文に更新するには:
...
use \Magento\Sales\Api\OrderRepositoryInterface;
class nameOfTheClass {
...
protected $_orderRepository;
...
public function __construct(..., OrderRepositoryInterface $orderRepository, ...){
$this->_orderRepository = $orderRepository;
...
}
...
public function setOrderStatus($orderID, $statusCode){
try{
// obtain the order with the order ID
$order = $this->_orderRepository->get($orderID);
$order->setState($statusCode)->setStatus($statusCode);
$this->_orderRepository->save($order);
return true;
} catch (\Exception $e){
// add some logging here
return false;
}
}
...
}
注文ステータスを更新するには:
$orderID = 1234; // this is the order ID
$code = 'paid';
$this->setOrderStatus($orderID, $code);
それが誰かを助けることを願っています。