답변:
다음과 같은 방법으로 할 수 있습니다
네임 스페이스 아래에 선언
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());
}
그것이 도움이되기를 바랍니다.
@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);
그것이 누군가를 도울 수 있기를 바랍니다.
마 젠토 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();
그러나 내가 가진 유일한 문제는 완전히 상태를 업데이트하지 않는다는 것입니다.
또한 새로운 송장, 배송 및 대변 메모를 작성할 수 없습니다. 감사