¿Cuál sería la mejor práctica más reciente para cargar Order usando el ID de incremento (en lugar del ID de Order) usando OrderRepository
¿Cuál sería la mejor práctica más reciente para cargar Order usando el ID de incremento (en lugar del ID de Order) usando OrderRepository
Respuestas:
Magento 2 utiliza contratos de servicio para recuperar y guardar objetos. En Magento, esta capa está formada por repositorios, que son administradores get()
y save()
métodos. Esto mantiene el código de usuario alejado de las llamadas de Modelo. No llame a métodos como modelo ( load()
o save()
o loadByIncrementId()
) directamente, que están siendo obsoleta, ya que el código personalizado debe utilizar los contratos de servicio. Además, no use la API desde Magento como sugiere Khoa, no tiene sentido. La API es para conectar Magento con otros sistemas.
Inyecte OrderRepository y SearchCriteriaBuilder en su constructor:
private $orderRepository;
private $searchCriteriaBuilder;
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Sales\Model\OrderRepository $orderRepository,
\Magento\Framework\Api\SearchCriteriaBuilder $searchCriteriaBuilder
){
$this->orderRepository = $orderRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
parent::__construct($context);
}
Y en tu función:
$searchCriteria = $this->searchCriteriaBuilder
->addFilter('increment_id', '000000001', 'eq')->create();
$orderList = $this->orderRepository->getList($searchCriteria)->getItems();
// $orderList is now an array of Orders with this incrementId, which is just one order obviously
/** @var \Magento\Sales\Model\Order $order */
$order = $orderList[0];
// Your logic here
$order = $this->orderRepository->save($order);
Guía oficial para desarrolladores de PHP de Magento en magento.com
$order = $orderList[0]
con $order = $orderList->getFirstItem()
para conseguir el primer punto (y única) de la colección.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
pero no recibí nada. $payment
Por favor revise mi problema aquí magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
Que yo sepa, deberíamos usar \Magento\Sales\Api\Data\OrderInterface
.
/** @var \Magento\Sales\Api\Data\OrderInterfaceFactory $order **/
protected $orderFactory;
public function __construct(
\Magento\Sales\Api\Data\OrderInterfaceFactory $orderFactory,
......
) {
$this->orderFactory = $orderFactory;
}
Cargar objeto de pedido por ID de incremento:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDITAR] debería intentar con contratos de servicio. Prueba la respuesta de Jacco.
\Magento\Sales\Api\OrderRepositoryInterface
y su get()
método