Запрошенная сущность не существует в Magento 2


Я пытаюсь получить информацию о заказе в своем пользовательском модуле из главного магазина, в нем говорится Requested entity doesn\'t exist.

Но у меня есть заказ и идентификатор заказа: 000000013.

/**
     * @var \Magento\Sales\Api\OrderRepositoryInterface
     */
    protected $orderRepository;


    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Sales\Api\OrderRepositoryInterface $orderRepository,
        array $data = []
    )
    {
        $this->orderRepository = $orderRepository;
        parent::__construct($context, $data);
    }


    public function getOrder($orderId,$email){

        //$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
       // $orderInformation = $objectManager->create('Magento\Sales\Model\Order')->load($orderId);

       try{
           $order = $this->orderRepository->get($orderId);

           if(trim($order->getCustomerEmail()) == trim($email)){
               return $order;
           }else{
               return $order;
           }
       }catch (\Exception $e){
            return $order;
       }

    }

Несмотря на то, что я отладил см. Ниже рис.

enter image description here

Я попробовал 2 способа (API и класс модели), но возвращал ту же ошибку.

Любая помощь в этом.

Author: Bojjaiah, 2017-01-12

3 answers

\Magento\Sales\Api\OrderRepositoryInterface::get получить заказ id, нет increment_id. Использовать getList, если вам нужно выполнить поиск по increment_id

/**
 * @param OrderRepositoryInterface $orderRepository
 * @param SearchCriteriaBuilder $searchCriteriaBuilder
 */
public function __construct(
    OrderRepositoryInterface $orderRepository,
    SearchCriteriaBuilder $searchCriteriaBuilder
) {
    $this->orderRepository = $orderRepository;
    $this->searchCriteriaBuilder = $searchCriteriaBuilder;
}

/**
 * Get order by increment id.
 *
 * @param string $incrementId
 * @return OrderInterface
 * @throws NoSuchEntityException
 */
public function getOrderByIncrementId($incrementId)
{
    $searchCriteria = $this->searchCriteriaBuilder->addFilter(
        OrderInterface::INCREMENT_ID,
        $incrementId
    )->create();

    $result = $this->orderRepository->getList($searchCriteria);

    if (empty($result->getItems())) {
        throw new NoSuchEntityException(__('No such order.'));
    }

    $orders = $result->getItems();

    return reset($orders);
}
 5
Author: Max, 2019-02-06 08:11:29

У меня была такая же ошибка, отображаемая на Admin > Sales > Orders при попытке получить доступ к списку всех заказов.

Оказалось несоответствие между двумя таблицами sales_order и sales_order_grid. Некоторые записи в sales_order_grid не имели соответствующих записей в таблице sales_order. К счастью, это была моя среда разработки, поэтому я мог легко удалять оскорбительные записи. Поэтому, если вы получите эту ошибку ( Запрошенный объект не существует ), это, скорее всего, проблема с целостностью данных.

 7
Author: zmish, 2018-03-22 15:02:35

У меня была аналогичная проблема, но я заметил, что параметром для метода get в $this->orderRepository->get($orderId); должно быть поле entity_id из sales_order, а не increment_id.

 1
Author: Sarjan Gautam, 2018-02-04 22:44:29