ฉันกำลังพยายามสร้าง hook_cron อย่างง่ายเพื่อเชื่อมต่อกับ API ภายนอก ส่งคืนข้อมูลบางส่วน และอัปเดตบางฟิลด์ในบางเอนทิตี ฉันกำลังสร้างสิ่งนี้เพื่อให้เข้าใจดีขึ้นว่า cron ทำงานอย่างไร ดังนั้นฉันจะอัปเกรดในภายหลังเป็นคิว
ปัญหาคือ cron กำลังทำงานอยู่ แต่ถึงแม้จะไม่มีข้อผิดพลาด เอนทิตีก็ไม่ได้บันทึกหรืออัปเดต ถ้าฉันคัดลอกโค้ดและพยายามดำเนินการด้วยเส้นทาง (ไม่ใช้ cron) มันจะทำงานได้ตามที่ตั้งใจไว้ ฉันไม่รู้จริงๆว่ามันมีปัญหาอะไร
ฉันขอขอบคุณสำหรับความช่วยเหลือของคุณ
รหัสด้านล่าง:
ฟังก์ชัน correios_web_service_cron()
{
$trackingService = \Drupal::service('correios_web_service.tracking');
$eventService = \Drupal::service('correios_web_service.event');
$ข้อผิดพลาด = null;
พยายาม {
$order_ids = \Drupal::entityQuery('commerce_order')
->เงื่อนไข ('ประเภท', 'แคมเปญ') //! Ver se terá que Mudar o Tipo
->condition('state', $eventService->getStatusByAlias('entregue')['description'], '<>')
->condition('state', $eventService->getStatusByAlias('avaliado')['description'], '<>')
->condition('state', $eventService->getStatusByAlias('cancelado')['description'], '<>')
->เงื่อนไข ('field_tracking_code', NULL, '<>')
->ดำเนินการ ();
$Orders = \Drupal::entityTypeManager()->getStorage('commerce_order')->loadMultiple($order_ids);
}
จับ (\ $e โยนได้) {
$ข้อผิดพลาด = $e->getMessage();
}
ถ้า (ว่าง ($ ข้อผิดพลาด) && !empty ($ คำสั่งซื้อ)) {
foreach ($Orders เป็น $Order) {
$tracking_code = $Order->get('field_tracking_code')->value;
พยายาม {
$response = $trackingService->trackObjectFormatted($tracking_code);
$Order->set('state', $response['description']);
$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']);
$Order->save();
}
จับ (\ $e โยนได้) {
\Drupal::logger('correios_web_service_cron')->ข้อผิดพลาด($e->getMessage());
}
}
}
ถ้า (!empty($error)) {
\Drupal::logger('correios_web_service_cron')->ข้อผิดพลาด($error);
}
}