繁体   English   中英

drupal 8 commerce 2 - 如何以编程方式取消发布所有已发布的产品及其产品变体

[英]drupal 8 commerce 2 - How to unpublish all published products and their products variations programmatically

在每次在我的网站上导入实际分类之前,我需要取消发布所有“活动”(已发布状态 == TRUE)产品和产品变体。 如何以编程方式进行? 我看到了两种方法:

  1. 通过直接查询数据库。
  2. 通过entytyQuery 方法:2.1。 使用“status”字段== 1创建所有产品的ID数组(像这样:$products_ids = Drupal::entityQuery('commerce_product')->condition('status', 1)->execute(); ) 2.2。 遍历给定的数组,将所有“状态”字段更改为值 0,并为每个产品获取其变化并将它们分配给“状态”字段值 0(在子周期中遍历它们)。

预先感谢您的帮助!

PS 产品数量(有产品变化)~ 25 000 - 30 000 sku

我的解决方案:

  1. 取消发布所有产品:

    $pids = \Drupal::entityQuery('commerce_product')->condition('status', 1)->execute(); $products = Product::loadMultiple($pids); foreach ($products as $product) { $product->status = 0; $产品->保存(); }

  2. 取消发布所有产品变体:

    $pvids = \Drupal::entityQuery('commerce_product_variation')->condition('status', 1)->execute(); $product_variations = ProductVariation::loadMultiple($pvids); foreach ($product_variations as $product_var) { $product_var->status = 0; $product_var->保存(); }

也许有更有效的方法来做到这一点? 我会很感激任何提示。

同样的解决方案,只是通过直接查询数据库:

 $query = \Drupal::database()->update('commerce_product_field_data');
  $query->fields([
    'status' => 0
  ]);
  $query->condition('status', 1);
  $query->execute();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM