Score: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');

    $ข้อผิดพลาด = 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);
    }
}
Jean da Silva avatar
cn flag
การทดสอบบางอย่างฉันคิดว่าเมื่อดำเนินการ Query ใน cron จะไม่ส่งคืนข้อมูลใด ๆ แต่เมื่อเรียกใช้แบบสอบถามเดียวกันนอก cron จะส่งคืนข้อมูล มีใครรู้บ้างว่านี่คืออะไร?
beltouche avatar
cn flag
ฟังดูเหมือนปัญหาการอนุญาตสำหรับฉัน พิจารณาว่า cron ไม่จำเป็นต้องเรียกใช้สิ่งต่าง ๆ ในฐานะผู้ใช้ที่เข้าสู่ระบบเหมือนกับเมื่อคุณใช้คอนโทรลเลอร์ ในกรณีที่คล้ายกัน ฉันใส่โค้ดของฉันใน Controller และให้ cron เรียกใช้
Jean da Silva avatar
cn flag
ขอบคุณสำหรับความคิดเห็น ฉันจะพยายามใช้แบบสอบถามในตัวควบคุม

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา