Drupal 9, การค้า Drupal 2.26
ฉันมีสมาชิกกิจกรรมกำลังฟัง CartEvents .. โดยเฉพาะ CartEvents::CART_ORDER_ITEM_UPDATE
ฉันมีผลิตภัณฑ์ประเภทหนึ่งที่อ้างอิงถึงผลิตภัณฑ์อีกประเภทหนึ่ง
เป้าหมายคือเมื่อผู้ใช้อัปเดตรายการสั่งซื้อสำหรับผลิตภัณฑ์ประเภท 'คลาส' ในรถเข็น รายการสั่งซื้อสำหรับปริมาณ material_kit ที่ตรงกันจะได้รับการอัปเดตให้ตรงกัน
ฉันมีผู้ติดตามกิจกรรมที่คล้ายกัน ซึ่งทำให้ฉันสามารถสร้างรายการสั่งซื้อที่ตรงกันได้เมื่อเพิ่มสินค้าลงในรถเข็น หรือเมื่อรายการสั่งซื้อถูกลบออก รายการสั่งซื้อที่ตรงกันก็จะถูกลบไปด้วย การอัปเดตปริมาณเพื่อให้ตรงกับการอัปเดตอื่นเท่านั้นไม่ทำงาน
เหตุการณ์เป็นไปตามคาดโฟลว์การดำเนินการผ่านเงื่อนไข อัปเดตปริมาณของรายการบรรทัดที่ 2 แต่ปริมาณที่อัปเดตจะไม่สะท้อนให้เห็น เหมือนมันไม่เคยเกิดขึ้น
ฉันอาจลบและสร้างรายการสั่งซื้อใหม่สำหรับผลิตภัณฑ์ได้ แต่ไม่ต้องการทำ และต้องการทำความเข้าใจกับสิ่งที่เกิดขึ้น
ดังนั้นจะอัปเดตปริมาณของรายการสั่งซื้ออื่นได้อย่างไร เมื่อมีการอัปเดตจำนวนรายการสั่งซื้อในรถเข็น
/**
* จัดการปริมาณชุดวัสดุอ้างอิงในการเปลี่ยนแปลงปริมาณผลิตภัณฑ์ระดับ
*
* @param \Drupal\commerce_cart\Event\CartOrderItemUpdateEvent $event
* เหตุการณ์รถเข็น
*/
ฟังก์ชั่นสาธารณะ onCartOrderItemUpdate (CartOrderItemUpdateEvent เหตุการณ์ $) {
$order_item = $event->getOrderItem();
$product_variation = $order_item->getPurchasedEntity();
$productType = $product_variation->get('type')[0]->get('target_id')->getValue();
ถ้า ($ productType == 'คลาส') {
$class_quantity = $order_item->getQuantity();
$cart = $event->getCart();
$product = $product_variation->getProduct();
$material_kit_field_value = $product->get('field_material_fees')->getValue();
ถ้า (!empty($material_kit_field_value[0]['target_id']) && blank($payable_to_instructor[0]['value'])) {
$material_kit_product = สินค้า::load($material_kit_field_value[0]['target_id']);
ถ้า (!empty($material_kit_product)) {
$material_kit_variations = $material_kit_product->getVariations();
$material_kit_variation_id = $material_kit_variations[0]->id();
foreach ($cart->getItems() เป็น $key => $oi) {
$pv = $oi->getPurchasedEntity();
$pt = $pv->get('type')[0]->get('target_id')->getValue();
ถ้า ($pt == 'material_kit') {
ถ้า ($pv->id() == $material_kit_variation_id) {
// ขั้นตอนการดำเนินการมาถึงที่นี่ แต่ปริมาณที่อัปเดตไม่ "ติด"
$oi->setQuantity($class_quantity);
$this->cartManager->updateOrderItem($cart, $oi);
// เหตุใดการอัปเดตรายการสั่งซื้อจึงไม่ทำงาน ^^
}
}
}
}
}
}
}