it-swarm-ja.com

Drushで特定のコンテンツタイプのノードを削除できますか?

Drushが特定のコンテンツタイプのノードを削除できるかどうか疑問に思っています。

何かのようなもの: $ drush delete-node --type=MyContentType

それが不可能な場合、methodを作成できますか?

13
chefnelone

次のような関数を作成できます。

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 repository にあります(下部にあるコマンドセクションを確認してください)。

4
Chapabu

開発モジュールをインストールし、drushを使用してすべてのノードを削除します。

$  drush genc --kill 0 0 

タイプオプションを指定することもできます。

$  drush genc --kill --types=article 0 0
21
ericj

私はあなたが以下のコマンドを使用することでできると思います

drush node_delete <nid>

編集:質問に関連する/関連するモジュールを見つけました

http://drupal.org/project/delete_all

用途

Drush

drush delete-all

例:drush delete-all article

15
ninjascorner

ドラッシュ9

drush entity:delete node --bundle=my_content_type

9
Denis Viunyk

このようなものは機能します(試していない):

_$query = new EntityFieldQuery();

$entities = $query->entityCondition('entity_type', 'node', '=')
  ->entityCondition('bundle', 'Announcements')
  ->execute();

$nids = array_keys($entities['node']);

node_delete_multiple($nids);
_

EntityFieldQuery() を使用して、コンテンツタイプAnnoucementsのすべてのノードを検索します。次に、結果からすべての_$nids_を取得し、 node_delete_multiple() を使用してそれらを削除します。

このコードを取得して別のPHPファイルに入れてから、_drush scr_で実行できます。

APIを使用すると、適切なフックがすべて確実に起動します。特に、ノードのリビジョンとフィールドデータ(およびそのリビジョン)も削除されるため、データベースに孤立したデータはありません。

5
mpdonadio

このスレッドにはいくつかの良いアイデアがあります。実際にプログラミングをしたくなく、Drushを使用したい場合は、 Delete All で提供されたモジュールを確認できます。

 Drush 
 drush delete-all 
例:drush delete-all記事
 
 Drush on Drupal 7 version 
 
すべてのノード、特定のコンテンツタイプのノードまたはユーザーを削除します。
 
例:
 drush delete-all articleすべての記事ノードを削除します。
 drush delete-all allすべてのタイプのノードを削除します。
 drush delete-all --resetすべてのタイプのノードを削除し、ノード、リビジョン、コメントカウンターをリセットします。
 drush delete-all usersユーザーを削除します。
 
オプション:
 --resetノード、リビジョン、コメントテーブルのカウンターをリセットします。
 --roles pickロール
 
エイリアス:da 
5
tenken

VBOにはDrushが統合されています。ノードのVBOビューを作成し、Drushを介して(drush vbo-executeを使用して)実行し、ノードタイプを引数として渡します。

4
Bojan Zivanovic

Drupal 7

次のワンライナーを試してください。すべてのMyContentTypeノードがDrupalから削除されます。

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);
1
kenorb

特定のコンテンツタイプのすべてのノードを削除するには、drushを介して次のコマンドを実行してみます。

drush eval '$res = (new EntityFieldQuery)->entityCondition("entity_type", "node")->entityCondition('bundle', 'MyContentType')->execute(); entity_delete_multiple("node", array_keys(reset($res)));'

ここで、MyContentTypeはマシンのコンテンツタイプ名(ページなど)です。

1
kenorb

Drushスクリプトを作成することもできます( "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 

ドキュメント: 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」は、最初のクエリで使用されるものです。

1
Mauro Mascia

@kenorbから提供された回答を更新しています。

Drupal 8

drush eval '$nids = \Drupal::entityQuery('node')->execute(); $storage = Drupal::entityTypeManager()->getStorage('node'); $e = $storage->loadMultiple($nids); $storage->delete($e);'
1

個々のノードの場合:

$ drush php-eval 'node_delete($node->nid);'

drush php-eval
Drupalのブートストラップ後に任意のPHPコードを評価します

1
edmitry

使用できます

drush node_delete NID特定のノードを削除しますが、コンテンツタイプごとにすべてのノードを削除する場合は、バッチAPIを使用してDrushプラグインを作成できると思います。

0
user8012

Drushで特定のコンテンツタイプのノードを削除できますか?

開発モジュールをインストールし、drushを使用してすべてのノードを削除します。

$ drush genc --kill 0 0

タイプオプションを指定することもできます。

$ drush genc --kill --types = article 0 0

0
wranvaud