Яка була б остання найкраща практика для завантаження замовлення за допомогою ідентифікатора приросту (замість ідентифікатора замовлення) за допомогою OrderRepository
Яка була б остання найкраща практика для завантаження замовлення за допомогою ідентифікатора приросту (замість ідентифікатора замовлення) за допомогою OrderRepository
Відповіді:
Magento 2 використовує договори на обслуговування для отримання та збереження об'єктів. У Magento цей шар формується Репозиторіями, якими керують get()
і save()
методи. Це захищає код користувача від модельних дзвінків. Не називайте моделі методів (наприклад , load()
чи save()
або loadByIncrementId()
) безпосередньо, вони в даний час НЕ рекомендуються в якості призначеного для користувача код повинен використовувати контракти на надання послуг. Крім того, не використовуйте API з Magento, як пропонує Khoa, це не має сенсу. API призначений для з'єднання Magento з іншими системами.
Введіть у свій конструктор замовлення репозиторію та пошукCriteriaBuilder:
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);
}
І у вашій функції:
$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);
Офіційний посібник для розробників Magento PHP на magento.com
$order = $orderList[0]
з , $order = $orderList->getFirstItem()
щоб отримати перший (і єдиний) елемент з колекції.
$order = $orderList->getFirstItem(); $payment = $order->getPayment();
але нічого не отримую. $payment
Будь ласка, перевірте мою проблему тут magento.stackexchange.com/questions/158935/…
$order = $orderList['000000001'];
Наскільки я знаю, ми повинні використати \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;
}
Завантажте об'єкт замовлення за збільшенням ідентифікатора:
$this->orderFactory->create()->loadByIncrementId('00001952-42');
[EDIT] повинен спробувати договори про надання послуг. Спробуйте відповідь Жакко.
\Magento\Sales\Api\OrderRepositoryInterface
та його get()
метод