Điểm:1

Sự kiện xóa đơn hàng thương mại và xóa mặt hàng đơn hàng

lá cờ cn

Câu hỏi nhanh Tôi hy vọng ai đó có thể dễ dàng trả lời.

Có hai sự kiện đặt hàng để xóa đơn hàng được liệt kê ở đây: https://github.com/drupalcommerce/commerce/blob/8.x-2.x/modules/order/src/Event/OrderEvents.php

commerce_order.commerce_order.delete

commerce_order.commerce_order_item.delete

Tôi muốn xóa một số thực thể có liên quan khi một dòng đơn đặt hàng bị xóa, vì vậy tôi có thể nối vào Commerce_order.commerce_order_item.delete, nhưng câu hỏi của tôi là nếu toàn bộ đơn đặt hàng bị xóa thì sự kiện này cũng sẽ được kích hoạt cho từng dòng riêng lẻ hay tôi cần để lặp lại mã của tôi cho commerce_order.commerce_order.delete và lặp qua từng dòng trên đơn đặt hàng?

No Sssweat avatar
lá cờ ua
Chà... có một cách để tìm hiểu, bạn có đang nghĩ những gì tôi đang nghĩ không?
Điểm:2
lá cờ cn

nếu toàn bộ đơn đặt hàng bị xóa thì sự kiện này cũng sẽ được kích hoạt cho từng dòng riêng lẻ

Đúng vậy - thực thể đơn đặt hàng thương mại có một đăngXóa phương thức lặp qua các mục đặt hàng và xóa từng mục một

hàm tĩnh công khai postDelete(EntityStorageInterface $storage, array $entities) {
  cha mẹ::postDelete($storage, $entities);

  // Xóa các mục đơn hàng của một đơn hàng đã xóa.
  $order_items = [];
  /** @var \Drupal\commerce_order\Entity\OrderInterface $entity */
  foreach ($thực thể dưới dạng $entity) {
    foreach ($entity->getItems() as $order_item) {
      $order_items[$order_item->id()] = $order_item;
    }
  }
  /** @var \Drupal\commerce_order\OrderItemStorageInterface $order_item_storage */
  $order_item_storage = \Drupal::service('entity_type.manager')->getStorage('commerce_order_item');
  $order_item_storage->delete($order_items);
}

Việc xóa mục đặt hàng sẽ kích hoạt sự kiện mà bạn đang đăng ký, vì vậy bạn không cần phải làm gì khác.

thiokol avatar
lá cờ cn
Tuyệt, cảm ơn bạn nhiều.
thiokol avatar
lá cờ cn
Tôi đã làm tất cả những điều này nhưng tôi gặp một vấn đề khác, tôi đã không thông báo rằng Commerce_order.commerce_order_item.delete được kích hoạt không chỉ khi một dòng đơn đặt hàng bị xóa mà cả khi một mặt hàng được xóa khỏi giỏ hàng. Có sự khác biệt nào giữa việc xóa một dòng khỏi đơn đặt hàng đã hoàn thành và xóa một mặt hàng khỏi giỏ hàng, xét về sự kiện đã đăng ký không? có sự kiện nào khác mà tôi nên sử dụng thay thế không?

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.