Ne olurdu artım kimliği kullanarak yük Sipariş son iyi uygulama (yerine al ID'nin) kullanılarak OrderRepository
Ne olurdu artım kimliği kullanarak yük Sipariş son iyi uygulama (yerine al ID'nin) kullanılarak OrderRepository
Yanıtlar:
Magento 2, nesneleri almak ve kaydetmek için Hizmet Sözleşmelerini kullanır. Magento'da bu katman yöneticiler get()
ve save()
yöntemler olan Depolar tarafından oluşturulur . Bu, kullanıcı kodunu Model çağrılarından uzak tutar. (Gibi bir model yöntemleri deme load()
ya save()
ya loadByIncrementId()
özel kod Hizmet Sözleşmeleri kullanmalıdır olarak doğrudan, onlar kaldırılmış ediliyor). Ayrıca, Khoa'nın önerdiği gibi Magento içinden API'yi kullanmayın, mantıklı değil. API, Magento'yu diğer sistemlere bağlamak içindir.
Yapıcıya OrderRepository ve SearchCriteriaBuilder'ı enjekte edin:
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);
}
Ve fonksiyonunuzda:
$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);
$order = $orderList[0]
bununla değiştirebilirsiniz $order = $orderList->getFirstItem()
.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
Ama hiçbir şey alma $payment
Lütfen benim sorun burada kontrol magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
Bildiğim kadarıyla kullanmalıyız \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;
}
Sipariş nesnesini artan kimliğe göre yükle:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] servis sözleşmelerini denemelidir. Jacco'nun cevabını dene.
\Magento\Sales\Api\OrderRepositoryInterface
ve get()
yöntemi