Magento2 $order->save() deprecated



Im Magento2 Core findet man noch einige solcher Code-Stellen:

<?php
$order = $clonedOrder;
$order->setId(
    null
)->setCustomerEmail(
    'customer@example.com'
)->setBillingAddress(
    $billingAddress
)->setShippingAddress(
    $shippingAddress
)->setPayment(
    $payment
);
$order->save();

Obwohl die save function von src/vendor/magento/framework/Model/AbstractModel.php deprecated ist (siehe hier) wird sie noch viel verwendet.

Da stellt sich natürlich die Frage wie das nun im Magento2 in Zukunft gemacht werden soll?

Vielleicht eher so?

<?php
$order = $this->orderRepository->get($order->getId());
$order->setOrderExported(1);
$returnSimpleXmlObject = $this->readResultOrderXml($result);
$order->addCommentToStatusHistory($this->createMessageString($returnSimpleXmlObject));
$this->orderRepository->save($order);

Anstelle von $order->save(); sollte sich also jeder das \Magento\Sales\Api\OrderRepositoryInterface anschauen und wie dieses in Magento2 verwendet wird. Das Magento Core Team arbeitet daran, dass nur noch das OrderRepositoryInterface in Zukunft Verwendung findet.

setOrderExported() ist dabei ein eigenes Attribut aus dem Beispielprojekt, kein Core-Attribut. addStatusHistoryComment() ist inzwischen ebenfalls deprecated, deshalb nutzt das Beispiel addCommentToStatusHistory().

Stand Magento Open Source / Adobe Commerce 2.4.9 (2026): AbstractModel::save() ist weiterhin seit 100.1.0 deprecated, die Empfehlung gilt also noch.

Siehe auch die Adobe Commerce Doku: Service Contract Design Patterns und Persistence Layer

Comments 💬 & Reactions ✨