wake-up-neo.com

Drupal 8: Löschen Sie alle Knoten des gleichen Typs

Ich muss alle Knoten desselben Typs in Drupal 8 entfernen (es gibt über 7k Knoten).

Es wäre kein Problem für Drupal 7 (DB-Abfrage + node_delete oder node_delete_multiple hätte mein Problem gelöst). Allerdings ist D8 etwas anders :)

Bitte Rat, wie kann ich das machen? Danke im Voraus!

10
megastruktur

Man sollte Entitätsabfragen verwenden, anstatt direkt in der Datenbank zu agieren:

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

Das Einrichten von Bereichen wie in der anderen Antwort sollte nicht zu schwierig sein.

Siehe EntityFieldQuery wurde umgeschrieben für weitere Informationen.

14
colan

Nun, die Antwort liegt an der Oberfläche:

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

Ich empfehle Ihnen, "Bereich" und eine Art "Stapel" zu verwenden (oder den Code einfach mehrmals auszuführen), da dies eine sehr fette Operation ist (500 Knoten pro Vorgang sind für 256 MB in Ordnung).

Um diesen Code auszuführen, können Sie entweder das benutzerdefinierte Modul OR schreiben, das Modul devel verwenden: https://www.drupal.org/project/devel

Nach der Installation gehen Sie zu yoursite_address/devel/php und führen dort den PHP-Code aus.

7
megastruktur

Drupal 8 hat die Funktionalität, Knoten nach Inhaltstyp abzurufen, also würde ich verwenden

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

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

sie können das Modul Devel verwenden
1- gehe zu Admin-> Konfiguration-> Entwicklung-> Inhalt generieren 
(Admin/Config/Entwicklung/Generieren/Inhalt)
2- Wählen Sie den Inhaltstyp aus, dessen Knoten gelöscht werden sollen.
3- Häkchen "Alle Inhalte dieser Inhaltstypen löschen .." (wichtig) 
4- setze "0" in "Wie viele Knoten möchten Sie generieren" (wichtig) 
Anweisungen finden Sie im beigefügten Bild.

Angehängtes Bild

4
Nysso

Das entity_delete_multiple ist seit Drupal 8.0.x veraltet und wird vor Drupal 9.0.0 entfernt. Verwenden Sie die delete () -Methode des Entitätsspeichers, um mehrere Entitäten zu löschen:

// 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
mouhammed

Der sehr einfache Weg ist die Installation des Bulk Delete Moduls. Es ist für D7 und D8 verfügbar.

Nach der Installation des Moduls wird die Option Bulk Delete-Knoten angezeigt, wenn Sie auf das Inhaltsmenü klicken. 

Es hat meinen Tag gerettet :)

Zu Ihrer Erleichterung habe ich einen Screenshot beigefügt.

 enter image description here

1
npcoder

Um alle Entitäten einiger Entitätstypen zu löschen, verwende ich dieses aus dem letzten Kommentar angepasste Snippet:

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

Ich verwende die Drupal-Konsole für diese https://docs.drupalconsole.com/ko/commands/entity-delete.html

drupal entity:delete [arguments]

0
Kevin howbrook