Я пытаюсь создать простой hook_cron для подключения к внешнему API, возврата некоторых данных и обновления некоторых полей в некоторых объектах. Я создаю это, чтобы лучше понять, как работает cron, поэтому позже я обновлю его до очереди.
Проблема в том, что cron работает, но даже без ошибок сущность не сохраняется и не обновляется. Если я скопирую код и попытаюсь выполнить его с помощью маршрута (без использования cron), он будет работать, как задумано. Я действительно не знаю, в чем проблема с этим.
Я благодарю вас за вашу помощь.
Код ниже:
функция correios_web_service_cron()
{
$trackingService = \Drupal::service('correios_web_service.tracking');
$eventService = \Drupal::service('correios_web_service.event');
$ошибка = ноль;
пытаться {
$order_ids = \Drupal::entityQuery('commerce_order')
->условие('тип', 'кампания') //! Ver se terá que мудар о типо
->условие('состояние', $eventService->getStatusByAlias('entregue')['description'], '<>')
->условие('состояние', $eventService->getStatusByAlias('авалиадо')['описание'], '<>')
->условие('состояние', $eventService->getStatusByAlias('отмена')['описание'], '<>')
->условие('field_tracking_code', NULL, '<>')
->выполнить();
$Orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple($order_ids);
}
поймать (\ Throwable $ e) {
$error = $e->getMessage();
}
если (пусто($ошибка) && !пусто($Заказы)) {
foreach ($Orders как $Order) {
$tracking_code = $Order->get('field_tracking_code')->значение;
пытаться {
$response = $trackingService->trackObjectFormatted($tracking_code);
$Order->set('состояние', $response['описание']);
$Order->set('field_tracking_event_code', $response['event_code']);
$Order->set('field_tracking_event_message', $response['event_message']);
$Order->set('field_tracking_delivery_date', $response['delivery_date']);
$Заказ->сохранить();
}
поймать (\ Throwable $ e) {
\Drupal::logger('correios_web_service_cron')->error($e->getMessage());
}
}
}
если (!пусто($ошибка)) {
\Drupal::logger('correios_web_service_cron')->ошибка($error);
}
}