回答:
次のような関数を作成できます。
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);
}
}
注-単純なSELECT
クエリを使用することもできますが、エンティティを操作しているように見えるため、EntityFieldQueryを使用する方が賢明で一般的です。
これは、引数の変更や追加も非常に簡単でなければなりません。Drushコマンドに簡単に配置することもできます -Drush リポジトリでこれを行う方法の例があります(下部にある[コマンド]セクションを確認してください)。
develモジュールをインストールし、drushを使用してすべてのノードを削除します。
$ drush genc --kill 0 0
タイプオプションを指定することもできますが、
$ drush genc --kill --types=article 0 0
devel_generate
モジュールはdevelのに含まれていて有効にする必要がありdrush en devel_generate
GENCは正常にするために使用されて作成最後に0がすでに何取り除くために何か新しいもの、と--killを作成しないことを言っているので、ノードを。
以下のコマンドを使用するとできると思います
drush node_delete <nid>
編集:質問に関連する/関連するモジュールを見つけました
http://drupal.org/project/delete_all
使用法
ブラシ
drush delete-all
例: drush delete-all article
delete_all
Drupal 8にはまだ移植されていませんが、gencの回答は機能します。
次のようなものが動作します(テストされていません):
$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node', '=')
->entityCondition('bundle', 'Announcements')
->execute();
$nids = array_keys($entities['node']);
node_delete_multiple($nids);
これにより、Annoucements
を使用してコンテンツタイプを持つすべてのノードが検索されますEntityFieldQuery()
。次に$nids
、結果からすべてを取得し、を使用してそれらを削除しますnode_delete_multiple()
。
このコードを取得して、別のPHPファイルに配置し、で実行できますdrush scr
。
APIを使用すると、すべての適切なフックが起動します。特に、ノードリビジョンとフィールドデータ(およびそれらのリビジョン)も削除されるため、データベースに孤立したデータがありません。
このスレッドにはいくつかの良いアイデアがあります。本当にプログラミングをしたくなく、Drushを使用したい場合は、投稿されたすべての削除モジュールをご覧ください。
ブラシ 全削除 例:全記事削除 Drupal 7バージョンのDrush すべてのノード、特定のコンテンツタイプのノードまたはユーザーを削除します。 例: dash delete-all articleすべての記事ノードを削除します。 drush delete-all allすべてのタイプのノードを削除します。 drush delete-all --resetすべてのタイプのノードを削除し、ノード、リビジョン、コメントカウンターをリセットします。 すべてのユーザーを削除するユーザーを削除します。 オプション: --resetノード、リビジョン、コメントテーブルのカウンタをリセットします。 -役割は役割を選ぶ エイリアス:da
VBOにはDrushが統合されています。ノードのVBOビューを作成し、Drushを使用して(を使用してdrush vbo-execute
)実行し、ノードタイプを引数として渡します。
ブラシスクリプトを作成することもできます(「bulk_delete.php」と呼ばれ、Drupalルートフォルダーの下に配置されているとしましょう)。
#!/usr/bin/env drush
$res = db_delete('node')
->condition('type', 'mycontenttype', '=')
->execute();
echo "deleted:" . $res;
これは絶対に最速の方法です。Drupalの関数db_deleteを使用したdbへの直接クエリ
使用法:
:~# 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
警告:このプロセスでは、フィールドのデータは削除されません。とにかく、これらのフィールドに同じプロセスを適用できます(各フィールドの「バンドル」列を見てください)。例えば:
#!/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";
}
ここで、「mycontenttype」は最初のクエリで使用されるものです。
'nid' > 5000
か?
Drupal 7
次のワンライナーを試してください。DrupalからすべてのMyContentTypeノードが削除されます。
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
または、エンティティタイプ名(ノードなど)に基づいてすべてのエンティティを削除できます。
drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->execute(); entity_delete_multiple("node", array_keys(reset($res)));'
注:node
エンティティタイプ名です。必要に応じて変更できます。
メモリまたはタイムアウトエラーが発生する場合は、次のセットを直前に追加できます$res
。
ini_set('memory_limit', -1); ini_set('max_execution_time', 0);
個々のノードの場合:
$ drush php-eval 'node_delete($node->nid);'
drush php-eval
Drupalのブートストラップ後に任意のphpコードを評価します
使用できます
drush node_delete NID
特定のノードを削除しますが、コンテンツタイプごとにすべてのノードを削除する場合は、バッチAPIを使用してDrushプラグインを作成できると思います。
また、特定のコンテンツタイプのノードをDrushで削除できますか?で回答されているように、develモジュールを使用してこれを行うこともできますか?
develモジュールをインストールし、drushを使用してすべてのノードを削除します。
$ drush genc --kill 0 0
タイプオプションを指定することもできますが、
$ drush genc --kill --types = article 0 0
@kenorbが提供する回答を更新します。
Drupal 8で
drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'