Drupal 8:删除相同类型的所有节点

时间:2016-01-04 14:12:01

标签: drupal-8

我需要删除 Drupal 8 中的所有相同类型的节点(节点超过7k)。

Drupal 7不会出现问题(DB query + node_delete或node_delete_multiple会解决我的问题)。但是,D8略有不同:)

请,建议,我该怎么做。提前谢谢!

9 个答案:

答案 0 :(得分:17)

应该使用实体查询而不是直接对数据库执行操作:

  $result = \Drupal::entityQuery('node')
      ->condition('type', 'my_content_type_name')
      ->execute();
  entity_delete_multiple('node', $result);

设置像其他答案一样的范围不应该太困难。

有关详细信息,请参阅EntityFieldQuery has been rewritten

答案 1 :(得分:7)

嗯,答案就在表面上:

$types = array('my_content_type_name');

$nids_query = db_select('node', 'n')
->fields('n', array('nid'))
->condition('n.type', $types, 'IN')
->range(0, 500)
->execute();

$nids = $nids_query->fetchCol();

entity_delete_multiple('node', $nids);

我建议你使用" range"某种"批次" (或者只是多次重新运行代码),因为它是一个非常胖的操作(每个操作500个节点可以用于256MB)。

要执行此代码,您可以编写自定义模块或使用开发模块:https://www.drupal.org/project/devel

安装完成后,转到 yoursite_address / devel / php 并在那里执行php代码。

答案 2 :(得分:5)

Drupal 8具有按内容类型获取节点的功能,因此我将使用

$nodes = \Drupal::entityTypeManager()
    ->getStorage('node')
    ->loadByProperties(array('type' => 'your_content_type'));

foreach ($nodes as $node) {
    $node->delete();
}

答案 3 :(得分:4)

从Drupal 8.0.x开始,不推荐使用entity_delete_multiple,将在Drupal 9.0.0之前删除。使用实体存储的delete()方法删除多个实体:

// query all entities you want for example taxonomy term from tags vocabulary
$query = \Drupal::entityQuery('taxonomy_term');
$query->condition('vid', 'tags');
$tids = $query->execute();

$storage_handler = \Drupal::entityTypeManager()->getStorage($entity_type);
$entities = $storage_handler->loadMultiple($tids);
$storage_handler->delete($entities);

答案 4 :(得分:4)

您可以使用Devel module
1 - 转到管理员 - >配置 - >开发 - >生成内容
(admin / config / development / generate / content)
2 - 选择您要删除其节点的内容类型 3 - 检查“删除这些内容类型中的所有内容..”(重要)
4 - 将“0”放入“您想要生成多少个节点”(重要)
有关说明,请参阅附件图片。

attached image

答案 5 :(得分:1)

非常简单的方法是安装Bulk Delete模块。它可用于D7& D8。

安装模块后,当您单击内容菜单时,您将看到批量删除节点标签选项。

它节省了我的一天:)

为方便起见,我附上了截图。

enter image description here

答案 6 :(得分:0)

要删除某些实体类型的所有实体,我使用从上次评论改编的片段:

$entity_types = ['taxonomy_term','node','menu_link_content',];
foreach ($entity_types as $entity_type) {
  $query = \Drupal::entityQuery($entity_type);
  $ids = $query->execute();

  $storage_handler = \Drupal::entityTypeManager()->getStorage($entity_type);
  $entities = $storage_handler->loadMultiple($ids);
  $storage_handler->delete($entities);
}

答案 7 :(得分:0)

我使用Drupal控制台 https://docs.drupalconsole.com/ko/commands/entity-delete.html

drupal entity:delete [arguments]

答案 8 :(得分:0)

对于 Drupal 9.0 工作正常

  $ids = \Drupal::entityQuery('node')
    ->condition('type', 'article')
    ->execute();

  $storage_handler = \Drupal::entityTypeManager()->getStorage("node");
  $entities = $storage_handler->loadMultiple($ids);
  $storage_handler->delete($entities);