Рейтинг:0

Cron запущен, но не сохраняет сущность

флаг cn

Я пытаюсь создать простой 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);
    }
}
Jean da Silva avatar
флаг cn
Выполняя некоторые тесты, я понял, что каким-то образом при выполнении запроса в cron он не возвращает никаких данных, но при выполнении того же запроса вне cron он возвращает данные. Кто-то знает, что это?
beltouche avatar
флаг cn
Звучит как проблема с разрешениями для меня. Учтите, что cron не обязательно запускает вещи как вошедший в систему пользователь, как когда вы используете контроллер. В аналогичном случае я фактически помещаю свой код в контроллер и вызываю его cron.
Jean da Silva avatar
флаг cn
спасибо за комментарий, я попытаюсь использовать запрос в контроллере.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.