Запрошенная сущность не существует в 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;
}
}
Несмотря на то, что я отладил см. Ниже рис.
Я попробовал 2 способа (API и класс модели), но возвращал ту же ошибку.
Любая помощь в этом.
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);
}
У меня была такая же ошибка, отображаемая на Admin > Sales > Orders
при попытке получить доступ к списку всех заказов.
Оказалось несоответствие между двумя таблицами sales_order
и sales_order_grid
. Некоторые записи в sales_order_grid
не имели соответствующих записей в таблице sales_order
. К счастью, это была моя среда разработки, поэтому я мог легко удалять оскорбительные записи. Поэтому, если вы получите эту ошибку ( Запрошенный объект не существует ), это, скорее всего, проблема с целостностью данных.
У меня была аналогичная проблема, но я заметил, что параметром для метода get в $this->orderRepository->get($orderId);
должно быть поле entity_id
из sales_order
, а не increment_id
.