Ich frage mich nur, ob Drush in der Lage ist, Knoten eines bestimmten Inhaltstyps zu löschen.
Etwas wie: $ drush delete-node --type=MyContentType
Wenn nicht möglich, kann ich eine solche Methode erstellen ?
Ich frage mich nur, ob Drush in der Lage ist, Knoten eines bestimmten Inhaltstyps zu löschen.
Etwas wie: $ drush delete-node --type=MyContentType
Wenn nicht möglich, kann ich eine solche Methode erstellen ?
Antworten:
Sie können eine Funktion wie folgt erstellen:
function MYMODULE_delete_all_the_things() {
$query = new EntityFieldQuery;
$result = $query->entityCondition('entity_type', 'node')
->propertyCondition('type', 'YOUR-CONTENT-TYPE')
->execute();
if (isset($result['node']) && count($result['node'])) {
$node_ids = array_keys($result['node']);
node_delete_multiple($node_ids);
}
}
Hinweis - Sie können auch eine einfache SELECT
Abfrage verwenden. Da Sie jedoch mit Entitäten arbeiten, erscheint es sinnvoller, EntityFieldQuery zu verwenden .
Dies sollte auch recht einfach zu ändern oder Argumente hinzuzufügen sein. Sie können es auch ganz einfach in einen Drush-Befehl einfügen. Ein Beispiel dafür finden Sie im Drush- Repository (siehe Abschnitt Befehle unten).
Installieren Sie das Entwicklungsmodul und löschen Sie mit drush alle Knoten.
$ drush genc --kill 0 0
Sie können auch eine Typoption angeben,
$ drush genc --kill --types=article 0 0
devel_generate
Modul ist in devel enthalten, muss jedoch in drush en devel_generate
genc aktiviert werden. Normalerweise wird es zum Erstellen von Knoten verwendet. Die 0 0 am Ende weist also darauf hin, dass nichts Neues erstellt werden soll, und der Befehl --kill, um das zu entfernen, was bereits vorhanden ist.
Ich vermute, Sie können mit dem folgenden Befehl
drush node_delete <nid>
BEARBEITEN: Ein Modul gefunden, das etwas mit der Frage zu tun hat
http://drupal.org/project/delete_all
Verwendung
Drush
drush delete-all
Beispiel: drush delete-all article
delete_all
ist die Genc-Antwort ab Dezember 2016 noch nicht auf Drupal 8 portiert .
So etwas würde funktionieren (ungetestet):
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node', '=')
->entityCondition('bundle', 'Announcements')
->execute();
$nids = array_keys($entities['node']);
node_delete_multiple($nids);
Dies findet alle Knoten mit dem Inhaltstyp Annoucements
using EntityFieldQuery()
. Es holt dann alles $nids
aus dem Ergebnis und löscht es mit node_delete_multiple()
.
Sie können diesen Code nehmen, in eine separate PHP-Datei schreiben und dann mit ausführen drush scr
.
Durch die Verwendung der API wird sichergestellt, dass alle richtigen Hooks ausgelöst werden. Unter anderem löschen sie auch die Knotenrevisionen und Felddaten (und ihre Revisionen), damit Sie keine verwaisten Daten in der Datenbank haben.
Zu diesem Thread gibt es einige gute Ideen. Wenn Sie nicht wirklich programmieren möchten und Drush verwenden möchten, sehen Sie sich das Modul Alle Beiträge löschen an:
Drush alle löschen Beispiel: Alle löschen Artikel drush Drush auf Drupal 7-Version Löschen Sie alle Knoten, Knoten eines bestimmten Inhaltstyps oder Benutzer. Beispiele: drush delete-all article Löscht alle Artikelknoten. drush delete-all all Löscht Knoten aller Art. drush delete-all --reset Löscht alle Knotentypen und setzt die Zähler für Knoten, Überarbeitungen und Kommentare zurück. drush delete-all users Benutzer löschen. Optionen: --reset Zähler für Knoten-, Revisions- und Kommentartabellen zurücksetzen. --Rollen wählen Rollen Aliase: da
VBO hat Drush-Integration. Erstellen Sie eine VBO-Ansicht von Knoten, führen Sie sie über Drush aus (mit drush vbo-execute
) und übergeben Sie den Knotentyp als Argument.
Sie können auch ein Drush-Skript erstellen (sagen wir, es heißt "bulk_delete.php" und befindet sich im Drupal-Stammverzeichnis):
#!/usr/bin/env drush
$res = db_delete('node')
->condition('type', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res;
Dies ist der absolut schnellste Weg, dies zu tun: eine direkte Abfrage an die Datenbank unter Verwendung der Drupal-Funktion db_delete
Verwendung:
:~# cd /var/www/www.mysite.com
:~# drush --uri=www.mysite.com scr bulk_delete.php
Doc: https://api.drupal.org/api/drupal/includes!database!database.inc/function/db_delete/7
Warnung: Durch diesen Vorgang werden die Daten ihrer Felder nicht gelöscht. Der gleiche Vorgang kann auf diese Felder angewendet werden (siehe Spalte "Bündel" jedes Felds). Beispielsweise:
#!/usr/bin/env drush
$field_tables = array(
'field_data_field_body',
'field_data_field_mycoolfield',
'field_revision_body',
'field_revision_field_mycoolfield'
);
foreach ($field_tables as $field_table) {
$res = db_delete($field_table)
->condition('bundle', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res . "\n\n";
}
Wobei "mycontenttype" derjenige ist, der in der ersten Abfrage verwendet wird.
'nid' > 5000
?
Drupal 7
Versuchen Sie es mit dem folgenden Einzeiler, der alle MyContentType-Knoten aus Drupal entfernt:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Oder Sie können alle Entitäten basierend auf dem Entitätstypnamen (z. B. Knoten) entfernen:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Hinweis: node
Ist der Name Ihres Entitätstyps, können Sie ihn bei Bedarf ändern.
Wenn Sie Speicher- oder Zeitüberschreitungsfehler erhalten, können Sie die folgenden Sätze direkt vor dem hinzufügen $res
:
ini_set('memory_limit', -1); ini_set('max_execution_time', 0);
Um alle Knoten eines bestimmten Inhaltstyps zu löschen, können Sie versuchen, den folgenden Befehl über drush auszuführen:
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
Wobei MyContentType der Name Ihres Computer-Inhaltstyps ist (z. B. Seite).
Für einzelne Knoten:
$ drush php-eval 'node_delete($node->nid);'
drush php-eval
Bewerten Sie beliebigen PHP-Code nach dem Bootstrapping von Drupal
Sie können verwenden
drush node_delete NID
um einen bestimmten Knoten zu löschen, aber wenn Sie alle Knoten nach Inhaltstyp löschen möchten, können Sie ein Drush-Plugin mit der Batch-API erstellen.
Sie können dies auch mit dem Entwicklungsmodul tun, wie unter Kann ich Knoten eines bestimmten Inhaltstyps mit Drush löschen?
Installieren Sie das Entwicklungsmodul und löschen Sie mit drush alle Knoten.
$ drush genc --kill 0 0
Sie können auch eine Typoption angeben,
$ drush genc --kill --types = Artikel 0 0
Aktualisierung der Antwort von @kenorb.
In Drupal 8
drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'