web-dev-qa-db-ja.com

Drupal 8:同じタイプのすべてのノードを削除します

Drupal 8で同じタイプのすべてのノードを削除する必要があります(7kを超えるノードがあります)。

Drupal 7の場合は問題ありません(DBクエリ+ node_deleteまたはnode_delete_multipleで問題が解決します)。ただし、D8は少し異なります:)

助言、どうすればできるのですか。前もって感謝します!

16
megastruktur

データベースを直接操作するのではなく、エンティティクエリを使用する必要があります。

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

他の答えのように範囲を設定することはそれほど難しくないはずです。

詳細は EntityFieldQueryが書き換えられました を参照してください。

20
colan

さて、答えは表面にあります:

$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);

「範囲」とある種の「バッチ」を使用する(またはコードを複数回再実行する)ことをお勧めします。これは、非常にファットな操作(256MBの場合、1回の操作で500ノードは問題ない)だからです。

このコードを実行するには、カスタムモジュールOR usedevelmodule: https:/ /www.drupal.org/project/devel

インストール後、yoursite_address/devel/phpに移動し、そこでphpコードを実行します。

7
megastruktur

Devel module を使用できます
1-Admin-> configuration-> development-> Generate contentに移動します
(admin/config/development/generate/content)
2-ノードを削除するコンテンツタイプを選択します。
3-check「これらのコンテンツタイプのすべてのコンテンツを削除します。」(重要)
4-put "0"in "いくつのノードにしたいですか生成する(重要)
手順については添付の画像を参照してください。

添付画像

6
Nysso

Entity_delete_multipleはDrupal 8.0.xの前に廃止され、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);
5
mouhammed

Drupal 8にはコンテンツタイプごとにノードを取得する機能があるので、

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

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

一部のエンティティタイプのすべてのエンティティを削除するには、最後のコメントから改作した次のスニペットを使用します。

$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);
}
1
izus

非常に簡単な方法は、 一括削除 モジュールをインストールすることです。 D7およびD8で使用できます。

モジュールをインストールした後、コンテンツメニューをクリックすると、一括削除ノードタブオプションが表示されます。

それは私の日を救った:)

わかりやすくするために、スクリーンショットを添付しました。

enter image description here

1
npcoder

Drupalこのためのコンソール https://docs.drupalconsole.com/ko/commands/entity-delete.html を使用します

drupal entity:delete [arguments]

1
Kevin howbrook